2012-01-22 53 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

相關問題