Python UTF-8 Latin-1显示错误的字符

时间:2015-02-20 13:26:03

标签: python utf-8 decode encode latin1

我正在编写一个非常小的脚本,可以将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 -*-声明,如果问题重要

1 个答案:

答案 0 :(得分:3)

您的源代码编码为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会从磁盘读取完全相同的字节以放入您的bytestring。

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

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