unicode (). decode ('utf-8', 'ignore') вызывает UnicodeEncodeError - PullRequest
42 голосов
/ 23 февраля 2011

Вот код:

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

Почему возникает ошибка при игнорировании?

Ответы [ 3 ]

60 голосов
/ 23 февраля 2011

Когда я впервые начал возиться со строками Python и Unicode, мне потребовалось некоторое время, чтобы понять жаргон декодирования и кодирования , так что вот мой пост от здесь, что может помочь:


Думайте о декодировании как о том, что вы делаете, чтобы перейти от обычной строки байтов к юникоду и кодированию как то, что вы делаете, чтобы вернуть из Unicode.Другими словами:

Вы де - код str для получения unicode строки

и en - код a unicode строка для получения str.

Итак:

unicode_char = u'\xb0'

encodedchar = unicode_char.encode('utf-8')

encodedchar будет содержать ваш символ Unicode, отображаемый в выбранной кодировке (в данном случае utf-8).

18 голосов
/ 24 февраля 2011

С http://wiki.python.org/moin/UnicodeEncodeError

Как ни парадоксально, UnicodeEncodeError может произойти, когда декодирование . Причиной этого, кажется, является специфичные для кодирования функции decode (), которые обычно ожидают параметр типа str. Похоже, что, увидев параметр unicode, функция decode () "преобразование с понижением частоты" это в str, а затем декодировать результат, предполагая, что он имеет их собственное кодирование. Также кажется, что «преобразование с понижением частоты» выполняется с использованием кодера ASCII. Отсюда сбой кодирования внутри декодера.

4 голосов
/ 23 февраля 2011

Вы пытаетесь декодировать unicode.Неявное кодирование, чтобы заставить декодирование работать, - вот что терпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...