【问题标题】:Python: UnicodeDecodeError: 'utf8' codec can't decode byte 0x91 [closed]Python:UnicodeDecodeError:'utf8'编解码器无法解码字节0x91 [关闭]
【发布时间】:2016-06-24 17:51:39
【问题描述】:

我正在按如下方式解析 CSV:

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

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)

还有以下错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0x91 in position 5: invalid start byte

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

我不知道如何解决这个问题,因此非常感谢任何帮助。

谢谢!

【问题讨论】:

  • 如果您尝试with open(args.csv, 'rU', encoding='utf-8') as csvfile: 会怎样?
  • 您可以从 csv 文件中添加一些数据,例如 hexdump。可能是因为文件被编码为来自某些窗口或其他编码的字节,因此文件无法有意义地解释为 utf8?
  • 这些点被称为umlaut
  • 错误不是来自代码,而是来自对json.dumps的调用
  • 你应该提到 Python 2.7 作为一个 tag

标签: python csv character-encoding python-2.x


【解决方案1】:

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

【讨论】:

  • 当我按照您的回答时,我得到:“TypeError: 'encoding' is an invalid keyword argument for this function”。 Fwiw,我正在运行 Python 2.7,并且(出于某些原因)无法更改。
  • @bclayman 最好在问题中提及这一点,即使在堆栈跟踪中提及。
  • 很好的答案!我设法将乌兹别克语的文件转换为 UTF-8 iconv -t UTF-8 -f Windows-1252 in.xml 我会花很多时间猜测 0x91 和 0x92 字符的含义。
猜你喜欢
  • 2012-08-08
  • 2014-07-09
  • 2016-08-03
  • 1970-01-01
  • 2014-12-24
  • 2019-03-13
  • 2012-09-10
相关资源
最近更新 更多