如何为特定的Python类启用解码?

时间:2015-11-13 07:15:25

标签: python unicode flask python-2.x python-unicode

我有以下代码:

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框架一起使用。

3 个答案:

答案 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 -*-