Python谁写入文件编码'latin-1'

时间:2013-08-15 11:00:59

标签: python encoding latin1

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

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

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

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

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

该文件包含例如城市名称“Genève”,其中u'Gen\xc3\xa8ve'为unicode。将其编码为'Latin-1'

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

让我在控制台上

>>> print gue
Genève

但是在档案文件中,它仍然是'Genève'。有人能指出我缺少的东西吗?

1 个答案:

答案 0 :(得分:3)

您正在将UTF-8数据解码为Latin 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一对一映射。