Django的JSON和XML fixture导致了UnicodeEncodeE

2024-05-15 23:56:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Django的dumpdata命令创建了一个JSON文件。当我用syncdb再次导入数据时,Python抛出一个异常:

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

这必须与JSON文件相关(而不是我的模型.py),因为--no-initial-data不会出现问题。现在我想知道我的编码哪里弄混了。在

JSON文件包含类似'Garc\u00eda Ram\u00f3n'的字符串。当我用Python用UTF-8或Latin1手动编码实际字符串时,我得到:

^{pr2}$

为什么syncdb会阻塞dumpdata的输出?我能做些什么来阻止这一切?源数据库和目标数据库(分别是MySQL和PostgreSQL)都使用UTF-8。在

更新:使用XML作为序列化格式时会发生完全相同的情况,并使用正确的编码声明:

<?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
[...]
<field type="CharField" name="last_name">García Ramón</field>

我不知道Django在什么时候试图使用ascii编解码器对üu'\xfc')进行编码(以及我如何改变它)。我将问题追溯到xml_serializer.py中的第185行:

 self.xml = SimplerXMLGenerator(self.stream, self.options.get("encoding", settings.DEFAULT_CHARSET))

并将DEFAULT_CHARSET='utf-8'添加到settings.py中,但现在我卡住了。在


Tags: 文件django字符串inpyselfjson编码