2016-08-17 87 views
4

我目前正試圖在一個非常大的.txt文件(幾百萬行文本)上使用一些簡單的正則表達式。最簡單的代碼引起該問題:python3 UnicodeDecodeError

file = open("exampleFileName", "r") 
    for line in file: 
     pass 

錯誤消息:

Traceback (most recent call last): 
    File "example.py", line 34, in <module> 
    example() 
    File "example.py", line 16, in example 
    for line in file: 
    File "/usr/lib/python3.4/codecs.py", line 319, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 7332: invalid continuation byte 

我怎樣才能解決這個問題? utf-8是錯誤的編碼?如果是這樣,我怎麼知道哪一個是對的?

謝謝,最好的問候!

+0

可能與http://stackoverflow.com/questions/5552555/unicodedecodeerror-invalid-continuation-byte – Jeff

+0

發佈'file -bi [your_filename]'的輸出。你會得到一個編碼。之後,將'encoding'參數提供給'open()'。 – light2yellow

+0

file -bi命令有什麼作用? –

回答

5

它看起來像是無效的UTF-8,你應該嘗試用latin-1編碼閱讀。嘗試

file = open('exampleFileName', 'r', encoding='latin-1') 
+0

從命令行讀取時你知道如何做同樣的事嗎? 我使用'input()'函數,是否有一種方法來配置其編碼或是否有其他一些可配置的功能? – chivorotkiv

+0

你是怎麼想出使用latin-1編碼的? –

+0

0xed是你可以在latin-1編碼中找到的'í'字符 – mic4ael

0

無法在運行中識別編碼。所以,無論是用戶,我寫了一個評論,或使用類似的結構(如提出的另一個答案),但是這是一個狂射的方法:

try: 
    file = open("exampleFileName", "r") 
except UnicodeDecodeError: 
    try: 
     file = open("exampleFileName", "r", encoding="latin2") 
    except: #... 

依此類推,直到你從Standard Python Encodings測試所有的編碼。

所以我覺得沒有必要去打擾這個嵌套的地獄,只要做file -bi [filename]一次,複製編碼並忘掉這個。

UPD。其實,我發現another stackoverflow answer,你可以使用,如果你在Windows