2009-12-07 73 views
3

我從Excel導出UTF-8文本,我想使用Python讀取和解析傳入數據。我讀過所有的網絡信息,所以我已經嘗試過這一點,例如:Python:如何讀取和解析unicode utf-8文本文件?

txtFile = codecs.open('halout.txt', 'r', 'utf-8') 
for line in txtFile: 
    print repr(line) 

我得到的錯誤是:

的UnicodeDecodeError:在「UTF-8」編解碼器不能解碼字節0xFF位置0:意外的代碼字節

綜觀十六進制編輯器的文本文件,第一個值是FFFE我也試過:

txtFile.seek(2) 

後右側的「開放」,但只是導致二不同的錯誤。

+2

不知何故,您輸出的文本不是UTF-8 *編碼*,而是可能採用不同的Unicode編碼,例如UTF-16。這些都是截然不同的。關於這個問題有很多知道!如果你閱讀了這兩篇文章,你將會像以前一樣掌握它:http://www.joelonsoftware.com/articles/Unicode.html http://www.amk.ca/python/howto/unicode – u0b34a0f6ae 2009-12-07 22:14:10

回答

2

這是一個BOM

編輯,從評析,這似乎是一個UTF-16 BOM

codecs.open('foo.txt', 'r', 'utf-16') 

應該工作。

+0

從您已鏈接的維基百科頁面:「BOM的UTF-8表示是字節序列EF BB BF」 - 因此文件不是UTF-8(由於OP認爲FFFE它是UTF-16小端順序)。 – jfs 2009-12-07 21:56:36

+0

失敗:「UnicodeDecodeError:'utf8'編解碼器無法解碼位置0中的字節0xff:意外的代碼字節」 – 2009-12-07 22:04:22

5

該文件不是UTF-8;它是UTF-16LE with a byte-order marker

+1

那裏有令人驚異的心靈力量! – 2009-12-07 21:52:02

+1

如何僅使用前2個字節來區分UTF-32LE與UTF-32LE? – jfs 2009-12-07 22:02:46

+0

好點;一個不能。我從來沒有在文件中遇到過UTF-32,但我確信它已經發生。一旦。在破解。 – 2009-12-08 02:54:24

1

擴大對喬納森的評論,此代碼應正確讀取的文件:看到

import codecs 
txtFile = codecs.open('halout.txt', 'r', 'utf-16') 
for line in txtFile: 
    print repr(line) 
0

嘗試,如果Excel文件有一些空行(然後再有值),這可能會導致意外的錯誤。