我正在使用 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/