尝试将 Django 模型转换为 XML 时出现 UnicodeEncodeError

发布于 2024-10-14 10:43:18 字数 513 浏览 2 评论 0原文

我找到了一个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) 

I found a python program: Export Django database to xml file that converts django models to a xml representation. I get these errors when trying to run the program. My models contain some text written in French.

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) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浊酒尽余欢 2024-10-21 10:43:18

看起来您的变量 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")

It looks like your variable text contains a non-ASCII string.

See:

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

So, you first need to encode your string into UTF-8:

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

Or, if (as the comments show) text may contain other variable types besides strings, use

self.output += unicode(mystring).encode("utf-8")
最偏执的依靠 2024-10-21 10:43:18

说真的,不要使用链接的代码。它太糟糕了,而且似乎是由完全不了解 unicode、字符编码、甚至不了解如何构建 XML 文档的人编写的。字符串连接?真的吗?

只是不要使用它。

Seriously, don't use the linked code. It's terrible, and appears to have been written by someone with absolutely no knowledge of unicode, character encodings, or even how to build up an XML document. String concatentation? Really?

Just don't use it.

万人眼中万个我 2024-10-21 10:43:18

您是否尝试过使用内置命令:

./manage.py dumpdata --format xml

您在 u'élève' 中使用 unicode 的方式没问题,所以这应该可以工作(正常...)。

Did you tried to use the built-in command :

./manage.py dumpdata --format xml

The way you used unicode in u'élève' is ok, so this should work (normalement...).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文