配置 repoze.bfg 使用 utf-8 编码
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题出在变色龙使用的
translationstring
库中。虽然变色龙可以配置为使用不同的编码,但它会将获得的数据直接传递给翻译字符串。
构造函数中的 Translationstring,它尝试从获取的数据中生成 unicode。当数据是非 ascii 字节序列(python 2.x 中的 str)时,就会出现错误。
解决方案是始终将 unicode 传递给翻译字符串或使用以下 diff 更新库本身:
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:
0xc5 是使用 latin-1 的 Å,如果该字符串来自 cgi 形式,python 无法在不知道源编码的情况下将其转换为 utf-8
,请确保服务器设置正确的编码
提示:
并查找类似
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:
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?