我正在编写一个非常小的脚本,可以将拉丁语-1字符转换成unicode(我是Python的一个完全初学者)。在
我试过这样的方法:
def latin1_to_unicode(character):
uni = character.decode('latin-1').encode("utf-8")
retutn uni
它适用于不特定于拉丁语-1集合的字符,但如果我尝试以下示例:
^{pr2}$它返回Ã¥
,而不是å
。其他字母也一样,比如æ
和ø
。在
有谁能解释一下为什么会这样吗? 谢谢
我的脚本中有# -*- coding: utf8 -*-
声明,如果它对问题有任何影响的话
您的源代码被编码为UTF-8,但是您将数据解码为拉丁语-1。不要这样做,您正在创建一个Mojibake。在
相反,从UTF-8解码,不再编码。
print
将写入sys.stdout
,该文件将配置有您的终端或控制台编解码器(在Python启动时检测到)。在我的终端配置为UTF-8,所以当我在终端中输入
å
字符时,就会产生UTF-8数据:您可以看到,该字符使用two bytes;当使用配置为使用UTF-8的编辑器保存Python源代码时,Python会从磁盘读取完全相同的字节以放入bytestring。在
将这两个字节解码为Latin-1会产生两个与拉丁-1编解码器对应的Unicode码位。在
您可能需要研究Unicode和编码之间的区别,以及这与Python的关系:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)作者:Joel Spolsky
Pragmatic Unicode作者:Ned Batchelder
Python Unicode HOWTO
相关问题 更多 >
编程相关推荐