2012-06-18 62 views
0

我有一個應該被解釋爲utf-8但不是(它以這種方式給予我的)文本的文本文件。 這裏是文件的一個典型的行的一個示例:在python中將「純文本」解釋爲utf-8文本

\ u30ed \ u30f3 \ u30c9 \ u30f3 \ u5728 \ u4f4f

本應是:

ロンドン在住

現在,我可以通過在命令行中鍵入以下命令手動執行python:

>>> h1 = u'\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f'  
>>> print h1 
ロンドン在住 

這給了我想要的東西。有沒有一種方法可以自動執行此操作?我試過做這樣的東西

>>> f = codecs.open('testfile.txt', encoding='utf-8') 
>>> h = f.next() 
>>> print h 
\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f 

我也試過'編碼'和'解碼'功能,有什麼想法嗎?

謝謝!

+1

沒有純文本這樣的東西,也沒有UTF-8文本這樣的東西。文字是一種抽象。 UTF-8是將字符編碼爲字節。另外,如果文件實際上包含反斜槓,則與在Python源文件中將雙引號之間的反斜槓完全不同。這是一個完全獨立的編碼步驟。如果你想在你的文件中使用ロ,然後把ro放在你的文件中。 –

回答

3

\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f不是UTF8;它使用python unicode轉義格式。使用unicode_escape編解碼器來代替:

>>> print '\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f'.decode('unicode_escape') 
ロンドン在住 

這裏是上述短語的UTF-8編碼,進行比較:

>>> '\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f'.decode('unicode_escape').encode('utf-8') 
'\xe3\x83\xad\xe3\x83\xb3\xe3\x83\x89\xe3\x83\xb3\xe5\x9c\xa8\xe4\xbd\x8f' 

注意,數據與unicode_escape解碼爲Latin-1的對待任何事情這不是一個公認的Python轉義序列。

但要小心;它可能是你真的在尋找JSON編碼數據,它使用相同的符號來指定字符轉義。使用json.loads()來解碼實際的JSON數據;帶有這種轉義的JSON字符串用"引號分隔,通常是較大結構(如JSON列表或對象)的一部分。

+0

這解釋了我的困惑/沮喪,非常感謝! – user1464209