2011-11-09 16 views
2

我有一個包含英文單詞的文本文件「words.txt」。假設它只包含三個詞:「一」,「二」和「三」。 我也有三個文件:one.dat,two.dat和three.dat。這些文件中的每一個都包含表示相應單詞轉錄的二進制數據格式是UTF-8。 我想要什麼:我想將「words.txt」和所有這些.dat文件合併成單個文檔,以便能夠打印。所以,我需要這樣的事(讓它命名爲 「final.dat」):蟒蛇聚集ascii和utf-8的東西

一個[萬] 2個[TU:] 3 [RI:]

但正確的 「日」 的標誌代替 」?」 :)

最重要的是我必須能夠將「final.dat」加載到MSWord或Writer中並打印出來。

我要去蟒蛇來完成它,但我真的卡住了所有這些「編解碼器」,「編碼」,「解碼」等等......

+0

如果他們有二進制數據,那麼你沒有UTF-8。反之亦然。 UTF-8不再是比ASCII更多的二進制數據。兩者都是文本數據。 – tchrist

回答

4

在Python 2.x的,讀取UTF-8文件可以使用

open('one.dat').read().decode('utf-8') 

codecs.open('one.dat', encoding='utf-8').read() 

兩者返回一個Python unicode對象來實現。如果要將str(ASCII /二進制字符串)s變成unicode,請使用s.decode('utf-8')

在Python 3.x中,做到這

open('one.dat').read() 

open('one.dat', encoding='utf-8').read() 

的想法是,一個str(Py2.x)或bytes(Py3.x)對象只包含二進制表示字符串某些編碼沒有指定哪種編碼; decode方法將其轉換爲適當的Unicode字符串(2.x中的unicode,3.x中的str)。

(順便說一句,UTF-8是不是「二進制數字」,它是在一個非ASCII編碼只是文本。)

+0

內建名稱'bytes'也存在於2.x(至少2.6)中。這是'str'的別名。 –

+0

感謝您的詳細解答。但我仍然有2個問題。 1)你確定我必須使用「s.decode」而不是「s.encode」來將ascii字符串變成unicode嗎? 2)在我將它們全部設置爲「unicode」之後,嘗試寫入文件,它會崩潰:UnicodeEncodeError:'ascii'編解碼器無法在位置0處對字符u'\ u0259'進行編碼:序號不在範圍內(128)使用f3.write(unicode_string)) – Nick

+0

@Nick:解碼將東西變成Unicode;編碼將Unicode轉換爲特定的格式,如UTF-8或ASCII。因此,在寫出數據之前,您可能需要「編碼」。當打開輸出文件時,使用'encoding' kwarg'打開'''codecs.open',然後將'unicode'對象寫入它。 –