Подтвердить что ты не робот

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'?

4b9b3361

Ответ 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. Неявное кодирование, чтобы сделать работу декодирования, является неудачной.