Python 将ISO-8859-1与UTF-8进行比较

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 进行这种比较的最佳方法是什么?我似乎无

我有一个包含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


进行这种比较的最佳方法是什么?我似乎无法将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
对象。即使这样,您仍然会遇到问题,其中字母
é
实际上由两个代码点表示,以及

你可以通过规范化文本来解决这个问题;从分解或合成的字符串中选择一个,并将两个字符串归一化为相同的形式;使用。有关这方面的更多详细信息,请参阅