UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ xe4'

Я постоянно получаю следующую ошибку:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 27: ordinal not in range(128)

Я уже пробовал

  1. x.encode("ascii", "ignore")
  2. x.encode("utf-8")
  3. x.decode("utf-8")

Однако ничего не работает.

Ответ 1

Вы должны обнаружить, в каком кодировании находится этот символ у источника.

Я думаю, это ISO-8859-1 (европейские языки), и в этом случае это "ä", но вы должны проверить. Он также может быть кириллицей или греческим.

См. Http://en.wikipedia.org/wiki/ISO/IEC_8859-1 для полного списка символов в этой кодировке.

Используя эту информацию, вы можете попросить Python ее преобразовать:

В Python 2.7

>>> s = '\xe4'
>>> t = s.decode('iso-8859-1')
>>> print t
ä
>>> for c in t:
...   print ord(c)
...
228
>>> u = t.encode('utf-8')
>>> print u
ä
>>> for c in bytes(u):
...   print ord(c)
...
195
164

Строка t внутренне кодируется в ISO-8859-1 в Python. Строка u внутренне кодируется в UTF-8, и этот символ занимает 2 байта в UTF-8. Также обратите внимание, что команда print "знает", как отображать эти разные кодировки.