【问题标题】:UTF8 encoding errorUTF8 编码错误
【发布时间】:2012-11-13 16:45:00
【问题描述】:

我有一些外部数据需要导入。如何将输入字符串编码为 un​​icode/utf8?

这是一个探测线的例子

>>>'Compa\xf1\xeda Dominicana de Tel\xe9fonos, C. por A. - CODETEL'.encode("utf8")
回溯(最近一次通话最后一次):
文件“”,第 1 行,在
UnicodeDecodeError:“ascii”编解码器无法解码位置 5 中的字节 0xf1:序数不在范围内 (128)

【问题讨论】:

标签: python unicode


【解决方案1】:

.encode("utf8") 期望源是 unicode 字符串。您将它与默认情况下具有“ascii”编码的“常规”字符串一起使用。你应该这样做:

original_string.decode('original_encoding').encode('utf-8')

在你的情况下,我的猜测是:

'Compa\xf1\xeda Dominicana de Tel\xe9fonos, C. por A. - CODETEL'.decode("iso8859-1").encode("utf8")

【讨论】:

    【解决方案2】:

    要将字节转换为 Unicode 字符串,请使用 decode 而不是 encode

    这也不是 UTF-8。我猜是Latin-1

    >>> print 'Compa\xf1\xeda Dominicana de Tel\xe9fonos, C. por A. - CODETEL'.decode("latin1")
    Compañía Dominicana de Teléfonos, C. por A. - CODETEL

    【讨论】:

      【解决方案3】:

      encode 从 unicode 字符串转换为字节序列。 decode 将字节序列转换为 unicode 字符串。你想要decode,因为你的数据已经被编码了。

      更一般地说,如果您从外部源读取字符串,您总是想要解码,因为世界上没有“unicode 字符串”这样的东西。只有各种编码中的 unicode 字符串表示。 Unicode 字符串就像柏拉图式的理想,只能通过有形的编码媒介来传输。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        • 2013-05-20
        • 1970-01-01
        • 2013-03-27
        相关资源
        最近更新 更多