【问题标题】:UnicodeDecodeError: 'cp932' codec can't decode byte 0xfcUnicodeDecodeError:“cp932”编解码器无法解码字节 0xfc
【发布时间】:2018-02-01 23:07:03
【问题描述】:

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 编码。 我可以只在开始时设置编码吗? 我试过设置 使用 open(os.path.join(root, file),'r',encoding='cp932') 作为 f: 但同样的错误

【问题讨论】:

  • 您能否添加完整的堆栈跟踪,以查看异常是在“print(line)”还是“for line in f”上引发的?您可能必须以二进制模式打开文件,因为您不知道所有文件的编码。

标签: python python-3.x character-encoding file-handling


【解决方案1】:

您可以传递 errors='ignore',但请务必检查文件的编码是什么。

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

【讨论】:

  • 它会忽略错误并跳过该文件是这样的吗?
  • 它不会完全忽略文件,而只是忽略文件内部无法解码的字符。也许只有一些文件或行编码不正确。您可以通过捕获异常并打印文件名来检查这些错误中有多少。
  • 会破坏你的数据@Chetan.B - 糟糕的主意
【解决方案2】:

在这里结束,因为我遇到了同样的错误。

我只是在学习,还好我找到了解决办法。

如果它说:

UnicodeDecodeError: 'cp932' 编解码器无法解码

表示你使用的文件不是用cp932编码的,所以你实际上需要改变编码。

就我而言,我试图读取以 UTF-8 编码的文件,因此解决方案是在我打开文件时包含该文件:

open("file.txt","r",encoding='utf-8')

我希望这对因同样错误而来到这里的任何人有所帮助。

【讨论】:

    【解决方案3】:

    尝试使用io 库:

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

    【讨论】:

    • 还是同样的问题:for line in f: UnicodeDecodeError: 'cp932' codec can't decode byte 0xfc in position 6616: 非法多字节序列
    • 可以分享文件内容吗?
    【解决方案4】:

    您需要将阅读模式从'r'更改为'rb'

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2016-08-03
      • 1970-01-01
      • 2013-08-20
      • 2012-09-10
      • 2014-04-09
      • 2018-08-02
      相关资源
      最近更新 更多