2012-01-22 73 views
2

我想加载一个文件保存为UTF-8到包含14种不同语言的Python(ver2.6.6)。我正在使用python codecs模块来解码txt文件。Python编解码器模块

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

这一切都很好。我解析整个文件,然后想要导出12个不同的语言文件。我不明白的问题是以下

我用输出下面的代码:

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ń
  • 实际产量:Dziennikzak,óceƒ

的字符串存储为是:

u'Dziennik zak\u201a\xf3ce\u0192' 

我试图从python文档(7.8编解码器)许多编码。任何信息在这一点上都会有所帮助。

+0

您在评论中说:“我将ascii文件保存为记事本中的UTF-8”:ascii是utf8的子集,不会导致问题。你的意思是“ANSI”而不是“ascii”? '导入区域设置的结果是什么?在你的系统上打印(locale.getpreferredencoding())? –

回答

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中它是不允许的。

+0

你提出了一个伟大的观点。它以这种方式存储。我在记事本中将UTF-8保存为ascii文件,我认为你不能这样做 – user1163567

+0

在保存为UTF-8之前,我需要做一个特殊的重新映射吗? – user1163567

+0

你的Python代码整体看起来很好(见上面的PS)。帖子中可能存在缩进问题,但除此之外,我没有看到问题。 – unutbu

相关问题