配置 repoze.bfg 使用 utf-8 编码

发布于 2024-11-09 19:06:52 字数 360 浏览 4 评论 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")

并且没有帮助。

I'm using repoze.bfg v1.3 and chameleon v2 (zpt templates).
I got troubles with encoding while rendering template:

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

How can i configure repoze.bfg to use utf-8 encoding with chameleon?
I added the following to Configurator:

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

And hasn't helped.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

捶死心动 2024-11-16 19:06:52

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

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

65c69
<        self = unicode.__new__(self, msgid)
--- patch
>       try:
>           self = unicode.__new__(self, msgid, "utf8")  # FIXED~
>       except Exception as e:
>           self = unicode.__new__(self,msgid)

The problem is in translationstring library which is used by chameleon.
While chameleon can be configured to use different encoding, it pass the data which it get directly to translationstring.
Translationstring in the constructor, where it tries to make unicode from the data it get. The error comes when the data is a non-ascii byte sequence (str in python 2.x).

The solution is to always pass unicode to translation string or update library itself using following diff:

65c69
<        self = unicode.__new__(self, msgid)
--- patch
>       try:
>           self = unicode.__new__(self, msgid, "utf8")  # FIXED~
>       except Exception as e:
>           self = unicode.__new__(self,msgid)
狠疯拽 2024-11-16 19:06:52

0xc5 是使用 latin-1 的 Å,如果该字符串来自 cgi 形式,python 无法在不知道源编码的情况下将其转换为 utf-8

,请确保服务器设置正确的编码

提示:

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

并查找类似

Content-Type: text 的 内容/html; charset=UTF-8

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

0xc5 is Å using latin-1, python cannot convert it in utf-8 without knowing the source encoding

if this string comes from a cgi form, make sure the server sets the correct encoding

hint:

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

and look for something like

Content-Type: text/html; charset=UTF-8

if the charset is not utf-8 your configuration is wrong,
maybe apache overrides your setting?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文