【问题标题】:Compare ISO-8859-1 to UTF-8比较 ISO-8859-1 和 UTF-8
【发布时间】:2015-03-20 15:59:29
【问题描述】:

我有一个包含 unicode 字符串的文件:u"L'\xe9quipe le quotidien"

我有另一个文件,从 Windows 导出并使用相同的字符串编码为 iso-8859-1"L'<E9>quipe le quotidien"(这是在我的 shell 中从 less 复制/粘贴)。

使用decode('iso-8859-1').encode('utf8') 转换Windows 文件的内容会产生一个不同于Windows 文件中的字符串:L'équipe le quotidien

进行这种比较的最佳方法是什么?我似乎无法将 latin1 字符串转换为 utf-8。

【问题讨论】:

    标签: python python-2.7 utf-8 iso-8859-1 mojibake


    【解决方案1】:

    您的文件未编码为 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.
    

    一般来说,您会在比较之前将两个文件解码为unicode 对象。即使这样,您仍然会遇到Combining Diacritical Marks 的问题,其中字母é 实际上用两个代码点表示,U+0065 LATIN SMALL LETTER EU+0301 COMBINING ACUTE ACCENT

    您可以通过规范化文本来解决这个问题;选择一个分解或组合并将两个字符串规范化为相同的形式;使用unicodedata.normalize() function。有关详细信息,请参阅Normalizing Unicode

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多