【问题标题】:Python UTF-8 Latin-1 displays wrong characterPython UTF-8 Latin-1 显示错误字符
【发布时间】:2015-04-22 04:43:36
【问题描述】:

我正在编写一个非常小的脚本,可以将 latin-1 字符转换为 unicode(我完全是 Python 初学者)。

我试过这样的方法:

def latin1_to_unicode(character):

    uni = character.decode('latin-1').encode("utf-8")
    retutn uni

它适用于不特定于 latin-1 集的字符,但如果我尝试以下示例:

print latin1_to_Unicode('å')

它返回Ã¥ 而不是åæø 等其他字母也是如此。

谁能解释一下为什么会这样? 谢谢

我的脚本中有 # -*- coding: utf8 -*- 声明,如果它对问题有任何影响的话

【问题讨论】:

    标签: python utf-8 decode encode latin1


    【解决方案1】:

    您的源代码已编码为 UTF-8,但您将数据解码为 Latin-1。不要那样做,你正在创建一个Mojibake

    改为从 UTF-8 解码,不再编码print 将写入 sys.stdout,这将使用您的终端或控制台编解码器进行配置(在 Python 启动时检测到)。

    我的终端配置为 UTF-8,所以当我在终端中输入 å 字符时,会生成 UTF-8 数据:

    >>> 'å'
    '\xc3\xa5'
    >>> 'å'.decode('latin1')
    u'\xc3\xa5'
    >>> print 'å'.decode('latin1')
    å
    

    可以看到字符使用了两个字节;当使用配置为使用 UTF-8 的编辑器保存 Python 源代码时,Python 会从磁盘读取完全相同的字节以放入您的字节串中。

    将这两个字节解码为 Latin-1 会产生两个对应于 Latin-1 编解码器的 Unicode 代码点。

    您可能想研究一下 Unicode 和编码之间的区别,以及它与 Python 的关系:

    【讨论】:

    • 非常感谢,解决方案有效,看来我还有一些学习要做!
    猜你喜欢
    • 2012-12-01
    • 2011-05-17
    • 2021-07-29
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多