0

我正在使用 repoze.bfg v1.3 和 chameleon v2(zpt 模板)。我在渲染模板时遇到了编码问题:

UnicodeDecodeError:“ascii”编解码器无法解码位置 9 的字节 0xc5:序数不在范围内(128)

如何配置 repoze.bfg 以将 utf-8 编码与变色龙一起使用?
我在配置器中添加了以下内容:

 config.add_settings(encoding="UTF-8")
 config.add_settings(default_encoding="UTF-8")

并没有帮助。

4

2 回答 2

1

问题出在translationstring变色龙使用的图书馆中。虽然 chameleon 可以配置为使用不同的编码,但它会将获得的数据直接传递给翻译字符串。
Translationstring 在构造函数中,它尝试从它获得的数据中生成 unicode。当数据是非 ascii 字节序列(python 2.x 中的 str)时,会出现错误。

解决方案是始终将 unicode 传递给翻译字符串或使用以下差异更新库本身:

65c69
<        self = unicode.__new__(self, msgid)
--- patch
>       try:
>           self = unicode.__new__(self, msgid, "utf8")  # FIXED~
>       except Exception as e:
>           self = unicode.__new__(self,msgid)
于 2012-01-13T02:07:39.897 回答
0

0xc5 是 Å 使用 latin-1,python 在不知道源编码的情况下无法将其转换为 utf-8

如果此字符串来自 cgi 表单,请确保服务器设置正确的编码

暗示:

lynx -dump -mime_header http://url_of_the_page_with_the_form_to_compile|less

并寻找类似的东西

内容类型:文本/html;字符集=UTF-8

如果字符集不是 utf-8 你的配置是错误的,也许 apache 会覆盖你的设置?

于 2011-05-25T01:53:40.980 回答