我正在阅读另一个团队每周发送的csv文件。
以前,我的python脚本阅读该文件时没有问题(使用panda),但使用本周的数据时,我得到了一个错误“UnicodeDecodeError:“ascii”编解码器无法解码位置208426中的字节0xa0:序号不在范围内(128)”
我发现另一篇stackoverflow的帖子是关于用chardet(python)检查csv编码的,我按照那个脚本操作,它显示encoding ='ascii',所以我更新了我的python read_csv如下:
df =pd.read_csv(“文件”,编码=“ascii”)
然而,我仍然得到了同样的错误。在进一步检查stackoverflow时,我偶然发现了一个建议使用encoding='ISO-8859-1'
的帖子,它起作用了。
我尝试使用encoding='ISO-8859-1'
对其他通常不需要编码的csv文件执行read_csv,令人惊讶的是,它对这些csv文件也有效。
我问发给我文件的团队是否做了任何编码,他们说没有。
我希望这不会最终咬我的屁股。将感谢任何人的投入。
1条答案
按热度按时间zbwhf8kr1#
每个文本文件都有一个编码,描述哪些字节转换为哪些字符。ASCII只支持字节值0-127,并为这些值分配特定字符,这就是为什么不支持字节值0xA 0(十进制160)。
ISO-8859-1为所有256个字节指定含义,0xA 0在该编码中是
NO-BREAK SPACE
。如果文件来自Windows计算机,则编码可以是任何旧版ANSI编码。Windows-1252在美国和大多数西欧Windows版本中很常见。0xA 0仍然是
NO-BREAK SPACE
,但其他字节值会有所不同,例如0x 80表示欧元符号(€)。由于ISO-8859-1不会失败,但可能会将字节转换为错误的值,因此如果您不知道实际的编码,则必须查看非ASCII字符,看看它们在文本文件的上下文中是否有意义。
差异示例(
errors='replace'
处理未定义的解码与):进一步阅读: