Python:UnicodeDecodeError:'utf8'编解码器无法解码字节0x91

bcl*_*man 0 python csv character-encoding python-2.x

我正在解析CSV如下:

with open(args.csv, 'rU') as csvfile:
        try:
            reader = csv.DictReader(csvfile, dialect=csv.QUOTE_NONE)
            for row in reader:
            ...
Run Code Online (Sandbox Code Playgroud)

args.csv我的文件名称在哪里.我文件中的一行是一个顶部有两个点的e.遇到这个时我的脚本会中断.

我得到以下堆栈跟踪:

File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 244, in dumps
    return _default_encoder.encode(obj)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
Run Code Online (Sandbox Code Playgroud)

并出现以下错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0x91 in position 5: invalid start byte
Run Code Online (Sandbox Code Playgroud)

FWIW,我正在运行Python 2.7并且升级不是一个选项(出于几个原因).

我很失落如何解决这个问题所以非常感谢任何帮助.

谢谢!

Chr*_*ung 7

字节0x91是Windows-1252编码中的"智能"开头单引号.所以听起来这就是你的文件使用的编码,而不是UTF-8.所以,使用open(args.csv, 'rU', encoding='windows-1252').

  • @bclayman你最好在你的问题中提到它,即使它在stacktrace中提到过. (3认同)