2012-03-27 52 views
2

去年,我建立了一个django站点,它为客户端同时使用仪表板和API。django + unicode常量错误

它们有时会将unicode信息(通常通过Microsoft键盘和单引号字符!)放入数据库中。

它的优良改变这一情况的一切,但我经常得到的是这样的错误,当一个新的角色加入,我没有“转换”:

的UnicodeDecodeError在/ XX/XXXXX/API/xxx.json

“ASCII”编解码器在0位置无法解码字节将0xEB:在范围序数不(128)

的问题其实是,我需要能够转换这个unicode(从模型)到HTML。

# if a char breaks the system, replace it here (duplicate line) 
text = unicode(str(text).replace('\xa3', '£')) 

我在这里重复这一行,但它只是以其他方式打破。

把我的头发拉出来,因为我知道这是直截了当的,我在某个地方做某事非常愚蠢。

已经在其他地方搜索过,并意识到虽然我的问题不是新的,但我在其他地方找不到答案。

+0

下面是一个很好的介绍,以解决unicode疼痛:http://bit.ly/unipain – 2012-03-27 15:03:19

回答

0

我认为text是unicode(这似乎一个安全的假设,因为\xa3对于£字符的Unicode)。

我不确定为什么你需要对它进行编码,看到文本将被转换为utf-8在模板中的输出,并且所有的浏览器都完全能够显示它。可能还有另外一点,不幸的是,可能你的代码会假设ASCII,而隐式转换正在破坏事情。

在这种情况下,你可能只是这样做:

text = text.encode('ascii', 'xmlcharrefreplace') 

其中非ASCII字符转换成像£ HTML/XML实体。

+0

嘿......已经尝试了很多方法...把这行放在所有代码的其余部分之前,它似乎工作!呐喊!谢谢 – padajo 2012-03-27 15:43:18

0

告诉JSON解码器,它应该将json文件解码为unicode。当直接使用json模块,这可以使用此代码来完成:

json.JSONDecoder(encoding='utf8').decode(
    json.JSONEncoder(encoding='utf8').encode('blä')) 

如果JSON解码通过一些其他模块发生(Django的,...),也许你可以通过这个另一模块为传递信息JSON的东西。