2012-07-10 75 views
-1

我從丹麥文本文件中讀取了一些數據。但我似乎無法找到解碼的方法。 原文是「多爾」,但在原始文本文件,其存儲爲「d√Πr」Python解碼用'ÆØÅ'解碼文件

所以我嘗試了明顯

InputData = "d√∏r" 
Print InputData.decode('iso-8859-1') 

黯然導致以下錯誤:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-6: ordinal not in range(128) 

UTF-8給出了相同的錯誤。 (使用Python 2.6.5)

我該如何解碼這個文本,以便打印的信息是「dør」?

+1

什麼版本的python?如果是這樣,你也應該解碼爲utf-8。 – Ben 2012-07-10 13:00:18

+0

版本2和utf-8不起作用。 – Malu05 2012-07-10 13:02:25

+0

2不是Python的版本。 – Ben 2012-07-10 13:02:52

回答

0

C3 B8是「ø」的UTF-8編碼。你需要閱讀UTF-8編碼的文件:

import codecs 
codecs.open(myfile, encoding='utf-8') 

你得到一個UnicodeEncodeError的原因是,你要輸出文字和Python不知道是什麼編碼終端在,所以它默認爲ascii。要解決此問題,請使用sys.stdout = codecs.getwriter('utf8')(sys.stdout)或使用環境變量PYTHONIOENCODING="utf-8"

請注意,這會給你的文字爲unicode對象;如果您的程序中的其他所有內容都是str,那麼您將遇到兼容性問題。將所有內容都轉換爲unicode或(可能更容易)使用ustr.encode('iso-8859-1')將文件重新編碼爲Latin-1,但請注意,如果有任何內容位於Latin-1代碼頁之外,則會中斷此文件。將程序轉換爲內部編碼utf-8時使用str可能更容易。

+0

嘗試了codec.open,但得到了這個錯誤UnicodeEncodeError:'ascii'編解碼器無法編碼字符u'\ xf8'在位置70 – Malu05 2012-07-10 13:38:44

+0

@ user1095570見上文。 – ecatmur 2012-07-10 13:42:20

+0

@ user1095570是的,你必須在使用'unicode'和'str'時保持一致。 – ecatmur 2012-07-10 13:54:14