2017-08-24 130 views
0

的UnicodeDecodeError: 'CP932' 編解碼器不能解碼字節0xFC有

import os 
 

 
for root, dirs, files in os.walk('Path'): 
 
    for file in files: 
 
     if file.endswith('.c'): 
 
      with open(os.path.join(root, file)) as f: 
 
        for line in f: 
 
         if 'word' in line: 
 
          print(line)

收到錯誤

的UnicodeDecodeError: 'CP932' 編解碼器不能在6616位置解碼字節0xFC有:非法多字節序列

我認爲文件需要移位jis編碼。 我可以在開始時設置編碼嗎? 我試圖設置 張開(os.path.join(根,文件), 'R',編碼= 'CP932')爲f: ,但得到同樣的錯誤

+0

您可以添加完整的堆棧跟蹤,以查看在「print(line)」還是在「for line in f」中引發了Exception? 您可能必須以二進制模式打開文件,因爲您不知道所有文件的編碼。 – cbodt

回答

0

您可以傳遞errors ='ignore',但一定要檢查文件的編碼是什麼。

open(os.path.join(root, file),'r', encoding='cp932', errors='ignore') 
+0

它會忽略錯誤並跳過該文件是這樣嗎? –

+0

它不會完全忽略文件,而只是文件內部無法解碼的字符。也許只有一些文件或行不正確編碼。你可以通過捕獲異常並打印文件名來檢查你有多少這些錯誤。 – cbodt

+0

而且會破壞你的數據@ Chetan.B - 糟糕的想法 –

0

嘗試使用io庫:

io.open(os.path.join(root, file), mode='r', encoding='cp932') 
+0

仍然是同樣的問題: 對於f中的行: UnicodeDecodeError:'cp932'編解碼器無法解碼位置6616中的字節0xfc:非法多字節序列 –

+0

可以共享文件內容嗎? –

相關問題