如何阅读特殊字符

时间:2013-03-20 07:07:03

标签: python

我从数据库中获取列的值,如下所示:

`;;][@+©

当我在Python代码中阅读此内容时,这会给出以下错误消息:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xa9 in position 7: invalid start byte

然后我尝试了下面的代码,但没有工作:

unicode(' `;;][@+©', 'utf-8')

现在我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:3)

首先,阅读this article on Unicode。您拥有的字符串采用部分编码进行编码,但不是UTF8。我们可以告诉它不是UTF8的原因是第7个字节0xa9(= 169)不在0-127(ASCII)范围内,但前面没有前导字节。

所以诀窍是找出它的编码方式。我们有一个提示:编码需要将字节0xa9表示为字形©。我猜它是Windows-1252Latin-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'