Skip to main content
 首页 » 编程设计

python之django + unicode 常量错误

2025年05月04日19webabcd

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

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

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

UnicodeDecodeError at /xx/xxxxx/api/xxx.json

'ascii' codec can't decode byte 0xeb in position 0: ordinal not in range(128)

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

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

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

因为我知道这是直截了当的事情而且我在某个地方做了一些非常愚蠢的事情,所以把我的头发弄得乱七八糟。

在别处搜索后发现虽然我的问题不是新问题,但我无法在别处找到答案。

请您参考如下方法:

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

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

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

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

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