读取带有中文字符的CSV文件时出现UnicodeDecodeError

2024-09-30 00:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在Elasticsearch中将一个中国csv作为文档编制索引。CSV中的数据以以下字节开头:

b'Chapter,Content,Score\r\n1.1.1,\xacO\xa7_\xa4w\xc5\xe7\xc3\xd2\xab~\xbd\xe8\xa8t\xb2\xce\xa9\xd2\xbb\xdd\xaa\xba\xa6U\xb6\xb5\xba\xde\xa8\xee\xacy\xb5{\xa1H,1\r\n1.1.2,\xab~\xbd\xe8\xba\xde\xb2z\xa8t\xb2\xce\xacO\xa7_\xb2\xc5\xa6XISO\xbc\xd0\xb7\xc7\xaa\xba\xadn\xa8D\xa1H,1\r\n'

代码如下所示

^{pr2}$

然后出现以下错误消息:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xac in position 0: invalid start byte

Tags: xbdxdexa7xe8xbaxc5xaaxab
2条回答

这是你的问题的一个可复制的例子。必须使用正确的编码。注意codecs是一个旧模块,Python 3中的内置open直接处理编码:

import csv

s = b'Chapter,Content,Score\r\n1.1.1,\xacO\xa7_\xa4w\xc5\xe7\xc3\xd2\xab~\xbd\xe8\xa8t\xb2\xce\xa9\xd2\xbb\xdd\xaa\xba\xa6U\xb6\xb5\xba\xde\xa8\xee\xacy\xb5{\xa1H,1\r\n1.1.2,\xab~\xbd\xe8\xba\xde\xb2z\xa8t\xb2\xce\xacO\xa7_\xb2\xc5\xa6XISO\xbc\xd0\xb7\xc7\xaa\xba\xadn\xa8D\xa1H,1\r\n'

# Create a file with your sample byte string
with open('checklist.csv','wb') as f:
    f.write(s)

# Open it with the correct encoding and newline requirements for using DictReader.
with open('checklist.csv',encoding='big5',newline='') as f:
    r = csv.DictReader(f)
    for line in r:
        print(line['Content'])

输出:

^{pr2}$

该文件不是UTF8编码的,从错误中可以很清楚地看出。用编辑器打开csv可能是latin2,这显然是错误的,因为它不包括汉字。毫无疑问,使用这种编码“有效”(不会引发错误),但却是胡言乱语:

Chapter,Content,Score
1.1.1,ŹO§_¤wĹçĂŇŤ~˝č¨t˛ÎŠŇťÝŞşŚUśľşŢ¨îŹyľ{ĄH,1

看一下standard encodings shipping with pythonbig5和{},它们是繁体中文的。当printed时,这两种方法给出的结果相同:

^{pr2}$

这是否有意义,只能由一个会说汉语的人来回答,但事实上,转换成功而没有错误,这一点有点令人期待。在

相关问题 更多 >

    热门问题