UnicodeEncodeError при сохранении объекта - PullRequest
0 голосов
/ 27 августа 2010

При сохранении объекта в админке Django я получаю эту ошибку, UnicodeEncodeError: кодек «ascii» не может кодировать символ u '\ xe9' в позиции 63: порядковый номер не в диапазоне (128)

моя база данных имеет юникод (postgres) Сохраняемый объект содержит несколько французских символов. У меня никогда не было проблем до сохранения объектов, когда я использовал MySQL.

1 Ответ

2 голосов
/ 27 августа 2010

Не видя никакого кода, сложно догадаться, что происходит, но я подозреваю, что вы передаете unicode чему-то, что затем преобразует это в str.

например.

>>> str(u'\xe9')

Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    str(u'\xe9')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)

Вероятно, вам следует кодировать все, что вы передаете, чтобы оно превратилось в подходящий поток байтов. Если он ожидает Unicode в str, то, скорее всего, utf8 - выбор, но обратитесь к документации для любых модулей, которые вы используете.

yourstring = yourunicode.encode("utf8")

unicode не является байтовой кодировкой, поэтому ее нельзя использовать для взаимодействия двух систем ... для этого необходимо применять кодировку (например, UTF8, UTF16 и т. Д.), Что понимают обе стороны , Таким образом, наличие postgres в unicode и python в unicode не позволяет вам просто передавать все их внутренние представления - в интерфейсе вам нужно будет указать, какую кодировку должен использовать каждый .

Что должен знать каждый кодировщик о Unicode

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