Rui*_*eco 0 python utf-8 iso-8859-1 mojibake python-2.7
我有一个包含unicode字符串的文件: u"L'\xe9quipe le quotidien"
我有另一个文件,从Windows导出并编码为iso-8859-1相同的字符串:( "L'<E9>quipe le quotidien"这是less我的shell中的复制/粘贴).
转换Windows文件的内容会decode('iso-8859-1').encode('utf8')导致字符串与Windows文件中的字符串不同:L'équipe le quotidien.
这种比较的最佳方法是什么?我似乎无法将latin1字符串转换为utf-8.
您的文件未编码为Latin-1(iso-8859-1).你创造了一个Mojibake ; 如果解释为Unicode字符串,我必须编码回Latin-1然后解码为UTF-8:
>>> print u"L'équipe le quotidien.".encode('latin1').decode('utf8')
L'équipe le quotidien.
Run Code Online (Sandbox Code Playgroud)
一般来说,在比较之前,您需要将两个文件解码为unicode对象.即使这样,你仍然会遇到组合变音符号的问题,其中字母é实际上用两个代码点表示,U + 0065 LATIN SMALL LETTER E和U + 0301 COMBINING ACUTE ACCENT.
您可以通过规范化文本来解决这个问题; 选择一个分解或组合并将两个字符串规范化为相同的形式; 使用该unicodedata.normalize()功能.有关详细信息,请参阅规范化Unicode.