【发布时间】:2015-02-21 06:14:00
【问题描述】:
Jinja2 在处理之前将所有模板变量转换为 unicode。有人能找到发生这种情况的地方吗?
问题是它假设字符串是ascii,但我们(在Roundup)在内部使用utf-8,我们的ORM(HyperDB)自动将对象属性恢复为utf-8,并将它们全部转换为@987654324 @ 在传递给模板之前的每个视图中都是太多的工作。
【问题讨论】:
-
避免隐式 Python 2 默认字节->unicode 强制,显式传递 unicode。不要
setdefaultencoding('utf-8')——它隐藏了错误。 -
@J.F.Sebastian,Python 2 没有字节。它假定这些是
ascii字符串。从ascii切换到utf-8,您能否明确指出隐藏了什么错误? -
什么跑腿?为什么不直接在 ORM 中添加一个包装器来解码你的字符串呢?为什么这是 Jinja2 的问题?
-
@techtonik:这不是 Jinja2 的问题。 Jinja2 假设您使用文本,因此希望您只使用 unicode。使用默认编解码器(即 ASCII)将任何字节字符串转换为 unicode。一直喂它
unicode对象,没有问题。 -
Armin 给了你证明。 Jinja 在某些地方使用
unicode.format()和u'...' % (),不会调用unicode.__add__。由于它们使用字符串文字,因此您也无法提供子类。
标签: python unicode encoding utf-8 jinja2