' UTF-8'编解码器不能解码位置4276中的字节0xa0:无效的起始字节

时间:2018-01-02 20:36:57

标签: python csv encoding utf-8

我尝试阅读并打印以下文件:txt.tsv(https://www.sec.gov/files/dera/data/financial-statement-and-notes-data-sets/2017q3_notes.zip

根据SEC,数据集以单一编码提供,如下所示:

  

制表符分隔值(.txt):utf-8,制表符分隔,\ n-终止行,第一行包含小写字段名称。

我目前的代码:

import csv

with open('txt.tsv') as tsvfile:
    reader = csv.DictReader(tsvfile, dialect='excel-tab')
    for row in reader:
        print(row)

所有尝试都以以下错误消息结束:

  

' UTF-8'编解码器不能解码位置4276中的字节0xa0:无效的起始字节

我有点失落。谁能帮我?非常感谢提前。

5 个答案:

答案 0 :(得分:13)

文件中的编码是' windows-1252'。使用:

open('txt.tsv', encoding='windows-1252')

答案 1 :(得分:2)

如果有人使用土耳其数据,那么我建议这一行:

df = pd.read_csv("text.txt",encoding='windows-1254')

答案 2 :(得分:0)

我对.csv文件有相同的错误消息,这对我有用:

     df = pd.read_csv('Text.csv',encoding='ANSI')

答案 3 :(得分:0)

ds = pd.read_csv('/Dataset/test.csv', encoding='windows-1252') 

对我来说很好,谢谢。

答案 4 :(得分:0)

如果输入有一个杂散的 '\xa0',那么它不是 UTF-8,句号。

是的,您必须将其重新编码为 UTF-8(请参阅:iconvrecode 命令,或者很多文本编辑器和 IDE 都可以这样做),或者使用 8 -bit 编码(正如所有其他答案所建议的那样)。

您应该问自己 - 这个字符到底是什么(0xa0 或 160)? 嗯,在许多 8 位编码中,它是一个不间断空格(如 HTML 中的  )。对于至少一种 DOS 编码,它是一个带重音的“a”字符。这就是为什么您需要查看从 8 位编码解码的结果。

顺便说一句,有时人们会说“UTF-8”,他们的意思是“我猜主要是 ASCII”。如果这是一个不间断的空间,它们就不会那么远:

In [1]: '\xa0'.encode()
Out[1]: b'\xc2\xa0'

'\xc2' 字节之前添加一个额外的字节即可。