我正在编写一个非常小的脚本,可以将拉丁文-1字符转换为unicode (我是Python的完全初学者)。
我试过这样的方法:
def latin1_to_unicode(character):
uni = character.decode('latin-1').encode("utf-8")
retutn uni它适用于不特定于拉丁文-1集的字符,但如果我尝试以下示例:
print latin1_to_Unicode('å')它返回Ã¥而不是å。æ和ø等其他字母也是如此。
有人能解释一下为什么会发生这种事吗?谢谢
我的脚本中有# -*- coding: utf8 -*-声明,如果对问题有任何影响的话
发布于 2015-02-20 13:28:02
您的源代码被编码为UTF-8,但您正在将数据解码为拉丁文-1。不要这样做,您正在创建一个莫吉贝克。
从UTF-8解码代替,不要再编码。print将写入使用终端或控制台编解码器配置的sys.stdout (在sys.stdout启动时检测到)。
我的终端配置为UTF-8,所以当我在终端中输入å字符时,会生成UTF-8数据:
>>> 'å'
'\xc3\xa5'
>>> 'å'.decode('latin1')
u'\xc3\xa5'
>>> print 'å'.decode('latin1')
Ã¥您可以看到该字符使用两个字节;当使用配置为使用UTF-8的编辑器保存Python源代码时,Python会从磁盘读取完全相同的字节以放入字节串中。
将这两个字节解码为拉丁语-1会产生两个与拉丁语-1编解码器对应的Unicode码点。
您可能想研究Unicode与编码之间的区别,以及这与Python之间的关系:
https://stackoverflow.com/questions/28630080
复制相似问题