2013-03-20 2 views
-2

Я получаю значение столбца из базы данных, как показано ниже:Как читать специальные символы

 
`;;][@+© 

Когда я читаю это в моем коде Python это дает ниже сообщение об ошибке:

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

Затем я попытался под кодом, но не работал:

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

Теперь, как я могу решить эту проблему?

+0

укажите кодировку данных, которые вы получаете из своей базы данных. Мы не можем догадываться, что это такое ... это _your_ database .... и, очевидно, это не utf-8 .... –

ответ

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' 
Смежные вопросы