Python编解码器模块

时间:2012-01-22 15:39:18

标签: python

我正在尝试将保存为UTF-8的文件加载到包含14种不同语言的python(ver2.6.6)中。我正在使用python codecs模块来解码txt文件。

import codecs
f = open('C:/temp/list_test.txt', 'r')
    for lines in f:
        line=filter_str(lines.decode("utf-8")

这一切都运作良好。我解析整个文件,然后想要导出 14种不同的语言文件。我无法理解的问题是以下

我使用以下代码进行输出:

malangout = codecs.open("C:/temp/'polish.txt",'w','utf-8','surrogateescape')
    for item in lang_dic['English']:
         temp = lang_dic[lang1][item]
         malangout.write(temp + '\n')
    malangout.close() 

示例:

  • 语言:波兰语
  • 预期产量:Dziennikzakłóceń
  • 实际输出:Dziennik zak,óceƒ

字符串按原样存储:

u'Dziennik zak\u201a\xf3ce\u0192'

我尝试过python docs(7.8编解码器)中的许多编码。任何信息都会有所帮助。

1 个答案:

答案 0 :(得分:1)

  

字符串按原样存储:

u'Dziennik zak\u201a\xf3ce\u0192'

嗯,这是一个问题,因为

In [25]: print(u'Dziennik zak\u201a\xf3ce\u0192')
Dziennik zak‚óceƒ

相反
In [26]: print(u'Dziennik zak\u0142\xf3ce\u0144')
Dziennik zakłóceń

所以看起来你要存储的unicode是不正确的。您确定C:/temp/list_test.txt中的内容是否正确?也就是说,list_test.txt是否包含

In [28]: u'Dziennik zak\u201a\xf3ce\u0192'.encode('utf-8')
Out[28]: 'Dziennik zak\xe2\x80\x9a\xc3\xb3ce\xc6\x92'

In [27]: u'Dziennik zak\u0142\xf3ce\u0144'.encode('utf-8')
Out[27]: 'Dziennik zak\xc5\x82\xc3\xb3ce\xc5\x84'


PS。您可能想要更改

temp + '\n'

temp + u'\n'

清楚地表明您正在将两个unicode添加到一起以形成unicode。 上面的两行在Python2中具有相同的结果,但在Python3中,将unicodestr加在一起会引发TypeError。即使在Python3中,'\n'unicode,我认为转换到Python3的挑战在于改变一个人对混合unicodestr的心态。在Python2中,它是默默地为您尝试的,在Python3中它是不允许的。