【发布时间】: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