2013-03-20 86 views
-2

我得到列的值从数据库中象下面这样:如何读取特殊字符

 
`;;][@+© 

当我读这在我的Python代码,这是给下面的错误信息:

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

然后我试着下面的代码但不工作:

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

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

+0

计算您从数据库接收到的rhe数据的编码。我们不能猜测它是什么......它是_your_数据库....显然它不是utf-8 .... – 2013-03-20 07:11:11

回答

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'