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