Python UTF8 Latin1显示错误的ch

2024-10-01 07:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试过这样的方法:

def latin1_to_unicode(character):

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

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

^{pr2}$

它返回Ã¥,而不是å。其他字母也一样,比如æø。在

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

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


Tags: to方法脚本defunicode字符utfencode
1条回答
网友
1楼 · 发布于 2024-10-01 07:14:41

您的源代码被编码为UTF-8,但是您将数据解码为拉丁语-1。不要这样做,您正在创建一个Mojibake。在

相反,从UTF-8解码,不再编码print将写入sys.stdout,该文件将配置有您的终端或控制台编解码器(在Python启动时检测到)。在

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

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

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

将这两个字节解码为Latin-1会产生两个与拉丁-1编解码器对应的Unicode码位。在

您可能需要研究Unicode和编码之间的区别,以及这与Python的关系:

相关问题 更多 >