0

我知道已经有很多关于编码/解码的问题。但这让我发疯,我迫切需要一些帮助。

我读了一个文件,将这些行转换为unicode

line = unicode(line,'latin-1')

然后,我做了一些突变并尝试将内容写回文件,像这样对字符串进行编码

o_str = '%s,%s' % (new_sname, loc )
w_out.write(o_str.encode('latin-1'))

该文件包含例如城市名称“日内瓦”,它是u'Gen\xc3\xa8ve'unicode。将其编码为“Latin-1”

gue = gu.encode('iso-8859-1')

在控制台上给我

>>> print gue
Genève

但在我的文件中,它仍然是“Genève”。有人可以指出我所缺少的吗?

4

1 回答 1

3

您正在将 UTF-8 数据解码为拉丁语 1,请改用正确的编解码器:

>>> 'Gen\xc3\xa8ve'.decode('latin1')
u'Gen\xc3\xa8ve'
>>> print 'Gen\xc3\xa8ve'.decode('latin1')
Genève
>>> 'Gen\xc3\xa8ve'.decode('utf8')
u'Gen\xe8ve'
>>> print 'Gen\xc3\xa8ve'.decode('utf8')
Genève

字母的正确 Unicode 代码点èU+00E8,由 Python Unicode 文字表示\u00e8或表示\xe8,以及 UTF-8 中的十六进制字节 C3A8。误解 C3 A8 会导致两个 unicode 字符è,然后您将其作为 C3 和 A8 再次写回文件,因为 Latin1 与 Unicode 一对一映射。

于 2013-08-15T11:10:57.693 回答