2017-08-24 261 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

可以共享文件内容吗? –

相关问题