Python 将ISO-8859-1与UTF-8进行比较
我有一个包含unicode字符串的文件:Python 将ISO-8859-1与UTF-8进行比较,python,python-2.7,utf-8,iso-8859-1,mojibake,Python,Python 2.7,Utf 8,Iso 8859 1,Mojibake,我有一个包含unicode字符串的文件:u“L”\xe9quipe le quotiden“ 我有另一个文件,从Windows导出,编码为iso-8859-1,使用相同的字符串:“L'quipe le quotiden”(这是我的shell中less的复制/粘贴) 使用decode('iso-8859-1').encode('utf8')转换Windows文件的内容会产生一个与Windows文件不同的字符串:L'195©quipe le quotideen 进行这种比较的最佳方法是什么?我似乎无
u“L”\xe9quipe le quotiden“
我有另一个文件,从Windows导出,编码为iso-8859-1
,使用相同的字符串:“L'quipe le quotiden”
(这是我的shell中less
的复制/粘贴)
使用decode('iso-8859-1').encode('utf8')
转换Windows文件的内容会产生一个与Windows文件不同的字符串:L'195©quipe le quotideen
进行这种比较的最佳方法是什么?我似乎无法将latin1字符串转换为utf-8。您的文件未编码为Latin-1(iso-8859-1)。你创造了一个新的世界;如果解释为Unicode字符串,我必须编码回拉丁语-1,然后解码为UTF-8:
>>> print u"L'équipe le quotidien.".encode('latin1').decode('utf8')
L'équipe le quotidien.
一般来说,在比较之前,您会将这两个文件解码为unicode
对象。即使这样,您仍然会遇到问题,其中字母é
实际上由两个代码点表示,以及
你可以通过规范化文本来解决这个问题;从分解或合成的字符串中选择一个,并将两个字符串归一化为相同的形式;使用。请参阅以了解更多详细信息。您的文件未编码为拉丁语-1(iso-8859-1)。您创建了一个替代;如果解释为Unicode字符串,我必须编码回拉丁语-1,然后解码为UTF-8:
>>> print u"L'équipe le quotidien.".encode('latin1').decode('utf8')
L'équipe le quotidien.
一般来说,在比较之前,您会将这两个文件解码为unicode
对象。即使这样,您仍然会遇到问题,其中字母é
实际上由两个代码点表示,以及
你可以通过规范化文本来解决这个问题;从分解或合成的字符串中选择一个,并将两个字符串归一化为相同的形式;使用。有关这方面的更多详细信息,请参阅