2013-04-09 38 views
3

我使用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,但现在我卡住了。

回答

1

做你把

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

你的.py文件的顶部?

+0

这不提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你会能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 – 2013-09-08 11:36:04

+0

这个答案也与所问的问题没有任何关系。你不需要在你的文件中加入这一行来处理用户输入或数据文件中的unicode数据(除非你在代码中直接使用Unicode字符,但问题显然不是这样的) – LXj 2014-09-14 21:02:10