我从数据库中获取列的值,如下所示:
`;;][@+©
当我在Python代码中阅读此内容时,这会给出以下错误消息:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa9 in position 7: invalid start byte
然后我尝试了下面的代码,但没有工作:
unicode(' `;;][@+©', 'utf-8')
现在我该如何解决这个问题呢?
答案 0 :(得分:3)
首先,阅读this article on Unicode。您拥有的字符串采用部分编码进行编码,但不是UTF8。我们可以告诉它不是UTF8的原因是第7个字节0xa9(= 169)不在0-127(ASCII)范围内,但前面没有前导字节。
所以诀窍是找出它的编码方式。我们有一个提示:编码需要将字节0xa9表示为字形©。我猜它是Windows-1252或Latin-1编码因为它们非常常见,并且在网格中查找A9(字符编码与播放战舰基本相同)给出了版权登录两者。
>>> unicode(' `;;][@+©')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 8: ordinal not in range(128)
>>> unicode(' `;;][@+©', 'latin-1')
u' `;;][@+\xc2\xa9'
>>> unicode(' `;;][@+©', 'cp1252')
u' `;;][@+\xc2\xa9'