2013-05-22 4 views
0

Во-первых, я довольно новичок в python, так что простите меня за все материалы n00b. Таким образом, логика приложения в Python выглядит следующим образом:python, UnicodeEncodeError, преобразование unicode в ascii

  1. Я посылаю и SQL Select в базу данных и возвращает массив данных.
  2. Мне нужно взять эти данные и использовать их в другом предложении SQL insert.

Теперь проблема заключается в том, что SQL-запрос возвращает мне строки unicode. Вывод выберите что-то вроде этого:

(u'Abc', u'Lololo', u'Fjordk\xe6r') 

Итак, сначала я пытался преобразовать его строку, но она не как третий элемент содержит это немецкого «аи» письма:

for x in data[0]: 
    str_data.append(str(x)) 

Я получение: UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ xe6' в позиции 6: порядковый номер не в диапазоне (128)

Я могу вставить unicode прямо, чтобы вставить также, как TypeError. ТипError: принуждение к Unicode: нужна строка или буфер, NoneType found

Любые идеи?

+0

http://stackoverflow.com/questions/2365411/python-convert-unicode-to-ascii-without-errors – Ofiris

ответ

7

Из моего опыта, Python и Unicode часто являются проблемой.

Вообще говоря, если у вас есть строка Unicode, вы можете преобразовать его в нормальную строку, как это:

normal_string = unicode_string.encode('utf-8') 

и преобразовать обычную строку в строку Unicode, как это:

unicode_string = normal_string.decode('utf-8') 
+0

Добро пожаловать! – Mezgrman

+2

'' utf-8'', как правило, правильный выбор, но не всегда. Вы должны использовать тот же набор символов, для которого настроена ваша база данных. –

+0

Итак, я наконец нашел, как заставить python находиться в UTF-8 по умолчанию: def set_default_encoding(): import sys reload (sys) # сделать setdefaultencoding доступным; IDK почему sys.setdefaultencoding («UTF-8») –

4

Проблема заключается в том, что функция str пытается конвертировать unicode с использованием кодовой страницы ascii, а код кодировки ascii не имеет отображения для u\xe6 (æ - char reference here).

Поэтому вам необходимо преобразовать его в некоторую кодовую страницу, которая поддерживает символ. В настоящее время наиболее обычным является кодировка utf-8.

>>> x = (u'Abc', u'Lololo', u'Fjordk\xe6r') 
>>> print x[2].encode("utf8") 
Fjordkær 
>>> x[2].encode("utf-8") 
'Fjordk\xc3\xa6r' 

С другой стороны, вы можете попытаться преобразовать его в cp1252 - Western latin alphabet, который поддерживает его:

>>> x[2].encode("cp1252") 
'Fjordk\xe6r' 

Но Eeaster европейская кодировка cp1250 не поддерживает:

>>> x[2].encode("cp1250") 
... 
UnicodeEncodeError: 'charmap' codec can't encode character u'\xe6' in position 6: character maps to <undefined> 

вопрос с unicode в python очень распространено, и я бы предложил следующее:

  • понять, что Юникода
  • понять, что UTF-8 является (не юникод)
  • понимают ASCII и другие кодовые страницы
  • рекомендуется преобразование рабочего процесса: вход (любой ф) ->convert to unicode -> (процесс) -> вывод на utf-8
Смежные вопросы