我正在为法语应用程序编写自定义Django模板标记。我的模板标记采用一个字符串参数:
{% mytag "Hello" %}
是否完美,但在尝试在值中放入一些非ASCII字符时失败。
你如何让这件事发挥作用:
{% mytag "Êtes-vous à Paris ?" %}
我收到了这个错误:
'ascii'编解码器无法对位置0中的字符u'\ xca'进行编码:序数 不在范围内(128)
Unicode错误提示
无法编码/解码的字符串是:Êtes-v
非常感谢!
编辑: Python版本 2.7 。以下是代码的代码:
@register.simple_tag(takes_context=True)
def mytag(context, my_var):
return "Here it is: {my_var}".format(my_var=my_var)
答案 0 :(得分:1)
尝试替换
return "Here it is: {my_var}".format(my_var=my_var)
通过
return u"Here it is: {my_var}".format(my_var=my_var)
在Python 2.7中,"Here it is: {my_var}"
是str
对象,编码字符串,my_var
是unicode
对象,解码后的字符串,格式化时,Python会尝试编码my_var
,使其与格式化字符串的类型相匹配。它默认使用ascii
编解码器,不支持特殊字符。
在格式化字符串之前添加u
使其成为unicode
字符串,格式化期间不会进行编码。
由于您可能会说法语,我建议您阅读this article,这是Python编码的一个很好的指南。