我去年建了一个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', '£'))
我在这里复制了这一行,但它只是打破了。
撕掉我的头发,因为我知道这是直截了当的,我在某处做了一些非常愚蠢的事情。
在其他地方搜索并意识到虽然我的问题不是新问题,但我无法在其他地方找到答案。
答案 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的东西。