UnicodeDecodeError:'utf8' 编解码器无法解码位置 0 的字节 0xa5:无效的起始字节
我在使用 Python-2.6 CGI
脚本时,发现服务器日志里出现了一个错误,错误发生在调用 json.dumps()
的时候。
Traceback (most recent call last):
File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module>
print json.dumps(__getdata())
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte
这里,__getdata()
函数返回的是一个字典。
在发这个问题之前,我看过 这个 问题。请问我该如何解决这个错误呢?
22 个回答
41
在读取 csv
文件时,我添加了一种编码方法:
import pandas as pd
dataset = pd.read_csv('sample_data.csv', header= 0,
encoding= 'unicode_escape')
56
你的字符串里面有一个不是ascii
字符的编码。
如果你不能用utf-8
来解码,可能是因为你的代码里用了其他的编码方式。例如:
>>> 'my weird character \x96'.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 19: invalid start byte
在这个例子中,编码是windows-1252
,所以你需要这样做:
>>> 'my weird character \x96'.decode('windows-1252')
u'my weird character \u2013'
现在你得到了Unicode
,你就可以安全地转换成utf-8
了。
188
默认情况下,打开文件的函数是以 'r' 模式运行的,也就是只读模式。这可以改成 'rb' 模式,也就是以二进制格式读取。
你可以试试下面的代码片段:
with open(path, 'rb') as f:
text = f.read()
404
如果你在尝试读取一个csv文件时遇到这个错误,pandas
库里的read_csv()
函数可以让你设置文件的编码方式:
import pandas as pd
data = pd.read_csv(filename, encoding='unicode_escape')
121
这个错误是因为字典里有一些非ASCII字符,这些字符无法被编码或解码。避免这个错误的一个简单方法是使用encode()
函数来编码这些字符串,方法如下(假设a
是包含非ASCII字符的字符串):
a.encode('utf-8').strip()