UnicodeEncodeError при попытке конвертировать модели Django в XML - PullRequest
1 голос
/ 27 января 2011

Я нашел программу на python: Экспорт базы данных Django в файл xml , который преобразует модели django в представление xml.Я получаю эти ошибки при попытке запустить программу.Мои модели содержат текст на французском языке.

Traceback (most recent call last):
  File "xml_export.py", line 71, in <module>
  writer.content(value)
File "xml_export.py", line 41, in content
  self.output += str(text)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3:
ordinal not in range(128) 

Ответы [ 3 ]

7 голосов
/ 27 января 2011

Похоже, ваша переменная text содержит не-ASCII строку.

См .:

>>> mystring = u"élève"
>>> mystring
u'\xe9l\xe8ve'
>>> str(mystring)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)

Итак, сначала вам нужно закодировать вашу строку в UTF-8:

>>> str(mystring.encode("utf-8"))
'\xc3\xa9l\xc3\xa8ve'

Или, если (как показывают комментарии) text может содержать другие типы переменных, кроме строк, используйте

self.output += unicode(mystring).encode("utf-8")
3 голосов
/ 27 января 2011

Серьезно, не используйте связанный код. Это ужасно, и кажется, что он был написан кем-то, совершенно не знающим юникод, кодировку символов или даже то, как создать документ XML. Конкатенация строк? Действительно?

Просто не используйте его.

0 голосов
/ 27 января 2011

Вы пытались использовать встроенную команду:

./manage.py dumpdata --format xml

То, как вы использовали юникод в u'élève', нормально, так что это должно работать (normalement ...).

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