【问题标题】:Python / Mako : How to get unicode strings/characters parsed correctly?Python / Mako:如何正确解析 unicode 字符串/字符?
【发布时间】:2011-04-14 05:36:34
【问题描述】:

我正在尝试让 Mako 渲染一些带有 unicode 字符的字符串:

tempLook=TemplateLookup(..., default_filters=[], input_encoding='utf8',output_encoding='utf-8', encoding_errors='replace')
...
print sys.stdout.encoding
uname=cherrypy.session['userName']
print uname
kwargs['_toshow']=uname
...
return tempLook.get_template(page).render(**kwargs)

相关模板文件:

...${_toshow}...

输出是:

UTF-8
Deşghfkskhü
...
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 1: ordinal not in range(128)

我认为字符串本身没有任何问题,因为我可以很好地打印它。

虽然我玩过(很多)input/output_encodingdefault_filters 参数,但它总是抱怨无法使用 ascii 编解码器进行解码/编码。

所以我决定尝试在documentation 上找到的示例,以下是“最好的”:

input_encoding='utf-8', output_encoding='utf-8'
#(note : it still raised an error without output_encoding, despite tutorial not implying it) 

${u"voix m’a réveillé."} 

结果是

voix mâ�a réveillé

我只是不明白为什么这不起作用。 “魔术编码注释”也不起作用。所有文件都使用 UTF-8 编码。

我花了好几个小时都没有用,我错过了什么吗?

更新:

我现在有一个更简单的问题:

既然所有变量都是 unicode,我怎样才能让 Mako 在不应用任何东西的情况下呈现 unicode 字符串?传递一个空白过滤器/ render_unicode() 没有帮助。

【问题讨论】:

    标签: python string unicode mako


    【解决方案1】:

    是的,UTF-8 != U​​nicode。

    UTF-8 是一种特定的字符串编码,ASCII 和 ISO 8859-1 也是如此。试试这个:

    对于任何输入字符串,请执行 inputstring.decode('utf-8')(或您获得的任何输入编码)。对于任何输出字符串,请执行outputstring.encode('utf-8')(或您想要的任何输出编码)。对于任何内部使用,请使用 unicode 字符串 ('this is a normal string'.decode('utf-8') == u'this is a normal string')

    'foo' 是一个字符串,u'foo' 是一个 unicode 字符串,它没有“具有”编码(无法解码)。所以任何时候python想要改变一个普通字符串的编码,它首先尝试“解码”它,然后“编码”它。默认是“ascii”,它经常失败:-)

    【讨论】:

    • 非常感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2018-03-24
    • 1970-01-01
    • 2011-12-13
    • 2020-12-29
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多