Python csv:UnicodeDecodeError

AP2*_*257 10 python csv encoding

我正在阅读带有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)
Run Code Online (Sandbox Code Playgroud)

我一直在阅读关于StackOverflow 的csv文档和许多其他问题.我认为在ASCII中成为\ xa3意味着原始CSV文件是UTF-8.

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

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

我已经尝试添加csv示例中unicode_csv_reader描述的函数,但它没有帮助.

----编辑-----

我应该澄清一件事.我看过这个看起来很相似的问题.但添加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
Run Code Online (Sandbox Code Playgroud)

那么也许我的文件毕竟不是UTF8?我该怎么说?

riw*_*alk 7

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

编辑:

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

>>> s = "La Pe\xf1a"
>>> print s
La Pe±a
>>> print s.decode("latin-1")
La Peña
>>>
Run Code Online (Sandbox Code Playgroud)

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

>>> s = "12\xa3"
>>> print s.decode("latin-1")
12£
>>>
Run Code Online (Sandbox Code Playgroud)

  • @ AP257这是旧的,但您可以使用`file -i filename`检查linux/unix上的charset.有了东欧语言,我看过之前提到的`enca`命令. (2认同)