Python 2.x 支持两种表示字符串对象的方法。一种是 str 类型,另一种是unicode 类型,它们都继承于 basestring 类型。不幸的是,默认的 str 不应该用于存储基于文本的信息,除非只用到 ASCII 字符。在 Python 2.6 中,可以在模块层指定 unicode 为默认值,而在 Python 3 中会是默认值。

    在使用 Unicode 字面量的 Python 模块的首行或第二行添加下面的注释,来妥善设置模块编码:

    用 Jinja2 来处理非 Unicode 数据是不可能的。这是因为 Jinja2 已经在语言层使用了 Unicode 。例如 Jinja2 在表达式中把不间断空格视为有效的空格,这需要获悉编码或操作一个 Unicode 字符串。

    另一件重要的事情是 Jinja2 如何处理模板中的字符串字面量。原生实现会对所有字符串字面量使用 Unicode ,但在过去这是有问题的,因为一些库显式地检查它们的类型是否为 str 。例如 datetime.strftime 不接受 Unicode 参数。为了不彻底破坏它, Jinja2 对只有 ASCII 的字符串返回 str,而对其它返回unicode: