我使用Django的dumpdata
命令创建了一个JSON文件。当我再次syncdb
导入数据,Python中抛出一个异常:Django的JSON和XML装置导致UnicodeEncodeError
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的尝试编码ü
(= u'\xfc'
) ascii编解码器(以及我如何改变这一点)。我在xml_serializer.py
跟踪问题回行185:
self.xml = SimplerXMLGenerator(self.stream, self.options.get("encoding", settings.DEFAULT_CHARSET))
,并添加DEFAULT_CHARSET='utf-8'
到settings.py
,但现在我卡住了。
这不提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你会能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 – 2013-09-08 11:36:04
这个答案也与所问的问题没有任何关系。你不需要在你的文件中加入这一行来处理用户输入或数据文件中的unicode数据(除非你在代码中直接使用Unicode字符,但问题显然不是这样的) – LXj 2014-09-14 21:02:10