我知道有很多关于编码/解码的问题。但这让我疯了,我迫切需要一些帮助。
我读了一个文件,将这些行转换为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'。有人能指出我缺少的东西吗?
答案 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一对一映射。