Django反序列化尝试将输入编码为ASCII?

3
代码如下:
>>> from django.core import serializers
>>> objects = serializers.deserialize('xml', fixturestr)
>>> o = next(objects)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/marcintustin/oneclickrep/oneclickcosvirt/lib/python2.7/site-packages/django/core/serializers/xml_serializer.py", line 156, in next
    for event, node in self.event_stream:
  File "/usr/lib/python2.7/xml/dom/pulldom.py", line 232, in next
    rc = self.getEvent()
  File "/usr/lib/python2.7/xml/dom/pulldom.py", line 265, in getEvent
    self.parser.feed(buf)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc5' in position 565: ordinal not in range(128)

fixturestr 是一个 Unicode 对象。不能消除非 ASCII 字符。如何阻止反序列化程序执行此操作?


你的文件顶部有 # encoding=utf8 吗? - Games Brainiac
1
@GamesBrainiac(1)这是在控制台上(2)控制台编码为utf-8(3)就我所知,这与问题无关。 - Marcin
2个回答

2

尝试使用smart_str将您的Unicode对象转换为字符串:

from django.utils.encoding import smart_str
from django.core import serializers

objects = serializers.deserialize('xml', smart_str(fixturestr))
o = next(objects)

谢谢,这正是我发现的,尽管我没有猜测编码的必要。我非常清楚它是什么。 - Marcin

0

看起来如果传递了一个Unicode对象,反序列化器会在某个地方尝试将其编码为Unicode。为了避免这种情况,必须传递一个字节串:

objects = serializers.deserialize('xml', fixturestr.encode('utf8'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接