Python / Mako:如何正确解析unicode字符串/字符?
作者:互联网
我试图让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)
我认为字符串本身没有任何问题,因为我可以很好地打印它.
尽管我在输入/ output_encoding和default_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()并没有帮助.
解决方法:
是的,UTF-8!= Unicode.
UTF-8是一种特定的字符串编码,ASCII和ISO 8859-1也是如此.尝试这个:
对于任何输入字符串,请执行inputstring.decode(‘utf-8’)(或您获得的任何输入编码).对于任何输出字符串,请执行outputstring.encode(‘utf-8’)(或所需的任何输出编码).对于任何内部使用,请使用unicode字符串(“这是普通字符串” .decode(‘utf-8’)== u“这是普通字符串”)
‘foo’是一个字符串,u’foo’是一个unicode字符串,它没有“具有”编码(无法解码).因此,无论何时python想要更改普通字符串的编码,它都首先尝试对其进行“解码”,然后对其进行“编码”.并且默认值为“ ascii”,它失败的频率通常不是:-)
标签:mako,unicode,string,python 来源: https://codeday.me/bug/20191209/2096580.html