3

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

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

这必须与 JSON 文件(而不是我的 models.py)有关,因为--no-initial-data. 现在我想知道我的编码在哪里混淆了。

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

>>> ustring = u'García Ramón'
>>> ustring.encode('utf-8')
'Garc\xc3\xada Ram\xc3\xb3n'
>>> ustring.encode('latin1')
'Garc\xeda Ram\xf3n'

为什么 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')(以及我如何改变它)。我将问题追溯到第 185 行xml_serializer.py

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

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

4

1 回答 1

0

你放了吗

#-*- coding: utf-8 -*-

到您的 .py 文件的顶部?

于 2013-09-08T11:12:20.883 回答