我正在尝试在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
这是你的问题的一个可复制的例子。必须使用正确的编码。注意
codecs
是一个旧模块,Python 3中的内置open
直接处理编码:输出:
^{pr2}$该文件不是UTF8编码的,从错误中可以很清楚地看出。用编辑器打开csv可能是
latin2
,这显然是错误的,因为它不包括汉字。毫无疑问,使用这种编码“有效”(不会引发错误),但却是胡言乱语:看一下standard encodings shipping with python有},它们是繁体中文的。当
^{pr2}$big5
和{print
ed时,这两种方法给出的结果相同:这是否有意义,只能由一个会说汉语的人来回答,但事实上,转换成功而没有错误,这一点有点令人期待。在
相关问题 更多 >
编程相关推荐