Python UTF-8 Latin-1 显示错误字符
Python UTF-8 Latin-1 displays wrong character
我正在编写一个非常小的脚本,可以将 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('å')
它returns Ã¥
而不是å
。其他字母也是如此,例如 æ
和 ø
.
谁能解释一下为什么会这样?
谢谢
我的脚本中有 # -*- coding: utf8 -*-
声明,如果它对问题有影响的话
您的源代码编码为 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 从磁盘读取完全相同的字节以放入字节串。
将这两个字节解码为 Latin-1 会生成两个对应于 Latin-1 编解码器的 Unicode 代码点。
您可能想研究一下 Unicode 和编码之间的区别,以及它们与 Python 的关系:
我正在编写一个非常小的脚本,可以将 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('å')
它returns Ã¥
而不是å
。其他字母也是如此,例如 æ
和 ø
.
谁能解释一下为什么会这样? 谢谢
我的脚本中有 # -*- coding: utf8 -*-
声明,如果它对问题有影响的话
您的源代码编码为 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 从磁盘读取完全相同的字节以放入字节串。
将这两个字节解码为 Latin-1 会生成两个对应于 Latin-1 编解码器的 Unicode 代码点。
您可能想研究一下 Unicode 和编码之间的区别,以及它们与 Python 的关系: