gpt4 book ai didi

python - 如何处理 mako 中的 unicode?

转载 作者:太空狗 更新时间:2023-10-29 17:31:19 27 4
gpt4 key购买 nike

我经常在使用 mako 时遇到这个错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 6: ordinal not in range(128)

我已经告诉 mako 我正在以任何可能的方式使用 unicode:

    mylookup = TemplateLookup(
directories=['plugins/stl/templates'],
input_encoding='utf-8',
output_encoding='utf-8',
default_filters=['decode.utf8'],
encoding_errors='replace')

self.template = Template(self.getTemplate(), lookup=mylookup,
module_directory=tempfile.gettempdir(),
input_encoding='utf-8',
output_encoding='utf-8',
default_filters=['decode.utf8'],
encoding_errors='replace')

html = self.template.render_unicode(data=self.stuff)

我所有的模板文件都以:

开头
## -*- coding: utf-8 -*-

并且,在它们内部,所有常量字符串都以“u”为前缀。我知道 self.stuff 参数包含 unicode 字符串,但我实例化 mako 对象的方式应该处理它(否则这些参数有什么用?)。有什么我忘了做的吗?

还有一个问题:encoding_errors='replace' 有什么意义?

=编辑=我只留下了一个 unicode 字符串,这是回溯:

Traceback (most recent call last):
File "C:\My Dropbox\src\flucso\src\plugins\stl\main.py", line 240, in updateView
flags=self.makoflags)
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\template.py", line 198, in render_unicode
as_unicode=True)
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 403, in _render
_render_context(template, callable_, context, *args, **_kwargs_for_callable(callable_, data))
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 434, in _render_context
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 457, in _exec_template
callable_(context, *args, **kwargs)
File "memory:0x41317f0", line 89, in render_body
File "C:\Python26\lib\site-packages\mako-0.3.4-py2.6.egg\mako\runtime.py", line 278, in <lambda>
return lambda *args, **kwargs:callable_(self.context, *args, **kwargs)
File "FriendFeed_mako", line 49, in render_inlist_entry
File "C:\Python26\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u263c' in position 8: ordinal not in range(128)

最佳答案

最后我将模板保存为 unicode,实际上(我猜)是 utf-16 而不是 utf-8。它们在磁盘上的大小翻了一番,并且 mako 开始提示“CompileException(”编码 'utf-8' bla bla 的 Unicode 解码操作),所以我更改了所有它们的第一行:

## -*- coding: utf-16 -*-

删除所有“.decode('utf-8')”——常量字符串仍然以“u”为前缀。

现在 python 中的初始化是:

mylookup = TemplateLookup(
directories=['plugins/stl/templates'],
input_encoding='utf-16',
output_encoding='utf-16',
encoding_errors='replace')

self.template = Template(self.getTemplate(), lookup=mylookup,
module_directory=tempfile.gettempdir(),
input_encoding='utf-16',
output_encoding='utf-16',
encoding_errors='replace')

现在可以了。看起来 utf-8 是错误的选择(或者我无法将模板保存为 utf-8),但我无法解释为什么它在 eclipse/pydev 中有效。

关于python - 如何处理 mako 中的 unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3333550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com