django + unicode常量错误

时间:2012-03-27 14:21:31

标签: python django unicode

我去年建了一个django网站,它为客户端使用了仪表板和API。

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

可以为所有内容更改这个实例,但是当我添加了一个我没有“转换”的新角色时,我经常得到的就是这个错误:

  

/xx/xxxxx/api/xxx.json处的UnicodeDecodeError

     

'ascii'编解码器无法解码位置0的字节0xeb:序数不在范围内(128)

问题实际上是我需要能够将此unicode(从模型)转换为HTML。

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

我在这里复制了这一行,但它只是打破了。

撕掉我的头发,因为我知道这是直截了当的,我在某处做了一些非常愚蠢的事情。

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

2 个答案:

答案 0 :(得分:0)

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

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

在这种情况下,您可以这样做:

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

将非ASCII字符转换为HTML / XML实体,如£

答案 1 :(得分:0)

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

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

如果通过其他模块(django,...)进行JSON解码,也许你可以通过这个其他模块将信息传递给json的东西。