2015-09-27 60 views
3

我試圖用一些Python模塊,但它給了我下面的錯誤:的UnicodeDecodeError:「UTF-8」編解碼器不能解碼位置字節0xa9 1

UnicodeDecodeError: 'utf8' codec can't decode byte 0xa9 in position 1 

我想這是因爲我的輸入文件中包含內部沒有UTF-8字符,所以我想在將它傳遞給模塊之前清理該文件。

如果我想識別非UTF-8字符並刪除它們,我該怎麼做?我嘗試了谷歌搜索,但無法找到很好的答案。

+1

沒有足夠的信息。你的輸入數據是什麼?它應該有一個可識別的編碼。你不應該猜測。 –

+0

我使用名爲Apache Tika的開源提取了一堆PDF和PPT文章中的文本。 – pandagrammer

+1

我的猜測是它的Windows代碼頁面之一,如Windows-1252。 '0xa9'將是一個版權標誌。 – roeland

回答

2

您可以嘗試將文件解碼爲UTF-8,忽略任何錯誤,然後使用UTF-8對其進行重新編碼。

string.decode('utf-8', errors='ignore').encode('utf-8') 

或者你可以更換一個合適的序列中的字符(這樣可以去掉),也this answer看到:

string.decode('utf-8', errors='replace').encode('utf-8') 

但是,你真的應該確定哪些編碼您的數據是,並轉換它適當。 iconv可能會有所幫助。

0

要麼使用上面提到的忽略錯誤選項,或者嘗試使用作爲替代方案如下:

for line in io.open("u.item", encoding="ISO-8859-1」)

大部分是我從某處分析數據的時候,它就會以這種格式,而不是UTF編碼-8。

相關問題