декодирование в кодировке Python 2.7 - PullRequest
4 голосов
/ 21 марта 2012

У меня проблема с кодировкой / декодированием.Я читаю текст из файла и сравниваю его с текстом из базы данных (Postgres). Сравнение выполняется в двух списках

. Из файла я получаю "jo \ x9a" для "još", а из базы данных я получаю "jo \ xc5 \xa1 "для того же значения

common = [a for a in codes_from_file if a in kode_prfoksov]

# Items in one but not the other
only1 = [a for a in codes_from_file if not a in kode_prfoksov]

#Items only in another
only2 = [a for a in kode_prfoksov if not a in codes_from_file ]

Как решить эту проблему?Какая кодировка должна быть установлена ​​при сравнении этих двух строк для решения проблемы?

спасибо

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Кажется, что строки вашего файла закодированы в Windows-1250. Кажется, ваша база данных содержит строки UTF-8.

Таким образом, вы можете сначала преобразовать все строки в Unicode:

codes_from_file = [a.decode("windows-1250") for a in codes_from_file]
kode_prfoksov]  = [a.decode("utf-8") for a in codes_from_file]

или если вам не нужны строки в кодировке Unicode, просто преобразуйте строку файла в UTF-8:

codes_from_file = [a.decode("windows-1250").encode("utf-8") for a in codes_from_file]
4 голосов
/ 21 марта 2012

Первый кажется windows-1250, а второй utf-8.

>>> print 'jo\x9a'.decode('windows-1250')
još
>>> print 'jo\xc5\xa1'.decode('utf-8')
još
>>> 'jo\x9a'.decode('windows-1250') == 'jo\xc5\xa1'.decode('utf-8')
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...