我有以下代码:
return render_template(
'sample.html',
title=('Härre').decode('utf-8'),
year=datetime.now().year,
message = ("Härre guut").decode('utf-8')
)
以上代码工作正常。但我想知道是否可以为特定类启用特殊字符的自动解码?所以我的代码就像这样:
return render_template(
'sample.html',
title=('Härre'),
year=datetime.now().year,
message = ("Härre guut")
)
如果是,那么它是如何完成的?
在我的情况下,特殊字符是字母ä,可以用utf-8解码。
我试图在我的代码的第一行添加以下行:
# -*- coding: utf-8 -*-
然而这无济于事。如果我尝试启用上面的行并取出所有decode('utf-8')
部分,我会收到以下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 12: ordinal not in range(128)
哪个是非常明显的错误。它尝试使用'ascii'编解码器来解码代码的特殊字符。
如果你想知道我为什么要启用这样的功能,答案是将来我会有更多的render_template()
方法。此方法与Flask框架一起使用。
答案 0 :(得分:2)
如果您只是在谈论您正在键入的字符串,我会尝试在其前面放置一个u
(例如u'string'
)。 u
告诉python字符串是unicode。我过去曾在类似情况下成功使用过它。
另外,根据flask docs(在底部的方式),要正确使用# -*- coding: ...
位,您必须将文本编辑器设置为UTF-8,否则它将被保存在ascii
中,这可能就是您仍然遇到错误的原因。
答案 1 :(得分:1)
冒着过于琐碎的风险,您可以使用Python 3自动进行此解码,Python 3使用Unicode而不是ascii。
否则,正如Brandon指出的那样,你必须用Python 2来解决输入问题,在程序中使用Unicode,在输出数据时输入字符串,以及输出数据时的编码,通常是utf-8,但适合你的任何东西。
在"边缘处解码和编码"并且在它们之间使用Unicode,是很多工作,但是必要的。这是切换到Python 3的一个很好的理由。:-)
答案 2 :(得分:1)
只需使用u
前缀将字符串定义为Unicode字符串:
return render_template(
'sample.html',
title=(u'Härre'),
year=datetime.now().year,
message = (u"Härre guut")
)
由于您已将非ASCII编入您的源代码,请设置'编码'位于源代码的顶部。确保您的编辑器的字符编码与coding
标头匹配。
# -*- coding: utf-8 -*-