Отбросьте вторую строку и выполните:
info = [[x.encode('ascii', 'ignore') for x in l] for l in info]
и посмотрите, приемлемы ли результаты. Это попытается преобразовать весь юникод в ascii и отбросить все символы, которые не удалось преобразовать. Вы просто хотите быть уверены, что если вы потеряете важный символ Юникода, это не проблема.
>>> info=[[u'\xa0Buffalo\u2019s League of legends ...', '2012-09-05'], [u' \xa0RCKIN 0 - 1 WITHACK.nq\xa0 ', u'\xa0Buffalo\u2019s League of legends ...', '2012-09-05']]
>>> info = [[x.encode('ascii', 'ignore') for x in l] for l in info]
>>> info
[['Buffalos League of legends ...', '2012-09-05'], [' RCKIN 0 - 1 WITHACK.nq ', 'Buffalos League of legends ...', '2012-09-05']]
Что происходит:
В вашей программе Python есть данные в Unicode (и это хорошо).
>>> u = u'\u2019'
Лучшая практика для взаимодействия - записывать строки Unicode в utf-8
. Вот те байты, которые вы должны хранить в своей базе данных:
>>> u.encode('utf-8')
'\xe2\x80\x99'
>>> utf8 = u.encode('utf-8')
>>> print utf8
’
А затем, когда вы считываете эти байты обратно в свою программу, вы должны затем их декодировать:
>>> utf8.decode('utf8')
u'\u2019'
>>> print utf8.decode('utf8')
’
Если ваша база данных не может обрабатывать utf-8
, я бы подумал о приобретении новой базы данных.
person
Aaron Hall
schedule
06.03.2014