【问题标题】:django + unicode constant errorsdjango + unicode 常量错误
【发布时间】:2012-03-27 14:21:31
【问题描述】:

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

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

为所有内容更改这个实例很好,但是当添加一个我没有“转换”的新字符时,我经常得到类似这样的错误:

UnicodeDecodeError at /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', '£'))

我在这里复制了这一行,但它只是中断了。

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

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

【问题讨论】:

  • 这里有一个很好的解决 unicode 问题的介绍:bit.ly/unipain

标签: python django unicode


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 嘿...已经尝试了很多方法来解决这个问题...将此行放在所有其余代码之前,它似乎可以工作!哎呀!谢谢
【解决方案2】:

告诉 JSON 解码器它应该将 json 文件解码为 un​​icode。直接使用json模块时,可以使用以下代码:

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

如果 JSON 解码是通过其他模块(django,...)进行的,也许您可​​以通过其他模块将信息传递到 json 文件中。

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2013-02-16
    • 2013-08-30
    • 2015-01-26
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多