Unicode(). decode ('utf-8', 'ignore'), поднимающий UnicodeEncodeError
Вот код:
>>> z = u'\u2022'.decode('utf-8', 'ignore')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2022' in position 0: ordinal not in range(256)
Почему UnicodeEncodeError возникает, когда я использую .decode?
Почему возникает какая-либо ошибка, когда я использую 'ignore'?
Ответы
Ответ 1
Когда я впервые начал возиться с строками python и unicode, мне потребовалось некоторое время, чтобы понять жаргон декодирования и кодировать тоже, так что здесь мой пост из здесь, может помочь:
Подумайте об декодировании как о том, что вы делаете, чтобы перейти от обычной байтовой последовательности к юникоду и кодировке как к тому, что вы делаете, чтобы вернуться из Юникода. Другими словами:
Вы де-код str
для создания строки unicode
и en - code a unicode
для создания str
.
Итак:
unicode_char = u'\xb0'
encodedchar = unicode_char.encode('utf-8')
encodedchar
будет содержать символ юникода, отображаемый в выбранной кодировке (в данном случае utf-8
).
Ответ 2
Из http://wiki.python.org/moin/UnicodeEncodeError
Как ни парадоксально, UnicodeEncodeError может произойти, когда декодирования. Причиной этого, по-видимому, является специфичные для кодирования функции декодирования(), которые обычно ожидают параметр типа str. Похоже, что, видя unicode, функции decode() "down-convert" он в str, затем декодирует результат, предполагая, что он их собственное кодирование. Также представляется, что "down-conversion" выполняется с использованием кодера ASCII. Следовательно, ошибка декодирования внутри декодера.
Ответ 3
Вы пытаетесь декодировать unicode
. Неявное кодирование, чтобы сделать работу декодирования, является неудачной.