2013-03-20 129 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'