python csv : UnicodeDecodeError

标签 python encoding csv

我正在使用 Python 的 csv 模块读取一个文件,并且有另一个编码问题(抱歉,这里有太多)。

在 CSV 文件中,有 £ 符号。读入行并打印后,它们变成了\xa3。

尝试将它们编码为 Unicode 会产生 UnicodeDecodeError:

row = [unicode(x.strip()) for x in row]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 0: ordinal not in range(128)

我一直在阅读 csv documentation以及 StackOverflow 上关于此的许多其他问题。我认为 £ 在 ASCII 中变成\xa3 意味着原始 CSV 文件是 UTF-8 格式的。

(顺便说一句,有没有快速检查 CSV 文件编码的方法?)

如果它是 UTF-8,那么 csv 模块不应该能够处理它吗?它似乎正在将所有符号转换为 ASCII,即使文档声称它接受 UTF-8。

我已经尝试添加 unicode_csv_reader 函数,如 csv examples 中所述,但这没有帮助。

----编辑-----

我应该澄清一件事。我看过this question ,看起来非常相似。但是添加在那里定义的 unicode_csv_reader 函数会产生不同的错误:

yield [unicode(cell, 'utf-8') for cell in row]
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa3 in position 8: unexpected code byte

所以也许我的文件毕竟不是 UTF8?我怎么知道?

最佳答案

尝试使用“ISO-8859-1”进行编码。看起来您正在处理扩展的 ASCII,而不是 Unicode。

编辑:

下面是一些处理扩展 ASCII 的简单代码:

>>> s = "La Pe\xf1a"
>>> print s
La Pe±a
>>> print s.decode("latin-1")
La Peña
>>>

更好的是,处理给你带来问题的确切角色:

>>> s = "12\xa3"
>>> print s.decode("latin-1")
12£
>>>

关于 python csv : UnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479961/

相关文章:

python - 压缩文件编码错误

python - 结合 pandas 和 shutil 时与解码相关的错误

php - UTF-8、PHP 和 XML Mysql

java - 从 CSV 读取字符串并解析到日期

python - 需要从curl迁移到pycurl的帮助

python - 如何在水平条形图中绘制计数器对象?

python - Merce csv 文件(来自文件夹)合并为一个,使用 Python 添加具有不同名称的列

python - 如何解决读取 csv 的问题,该文件是分号分隔的文件,其中某些字符串包含分号?

Python——Matplotlib 用户通过鼠标输入进行绘图

python - zipline 安装错误 : failed building wheel for bcolz