如何为特定 Python class 启用解码?
How to enable decoding for specific Python class?
我有以下代码:
return render_template(
'sample.html',
title=('Härre').decode('utf-8'),
year=datetime.now().year,
message = ("Härre guut").decode('utf-8')
)
以上代码运行良好。但是我想知道是否可以为特定的class启用特殊字符的自动解码?这样我的代码就变成了这样:
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框架使用。
如果你只是在谈论你正在输入的字符串,我会尝试在它们前面放一个 u
(例如 u'string'
)。 u
告诉 python 该字符串是 unicode。我过去曾在类似情况下成功地使用过它。
此外,根据 flask docs(底部的方式),要正确使用 # -*- coding: ...
位,您必须将文本编辑器设置为 UTF-8,否则它会保存在 ascii
,这可能就是您仍然收到该错误的原因。
冒着过于琐碎的风险,您可以使用 Python 3 使此解码自动进行,它使用 Unicode 而不是 ascii。
否则,正如 Brandon 指出的那样,您确实需要努力 Python 2 才能正确解码您的输入,在您的程序中使用 Unicode,在字符串前面加上令人敬畏的 'u',以及当您使用时的编码输出数据,通常是 utf-8,但任何适合你的。
在 "the edges" 处进行解码和编码,并在两者之间使用 Unicode,工作量很大,但很有必要。这是切换到 Python 3 的一个很好的理由。:-)
只需使用 u
前缀将您的字符串定义为 Unicode 字符串:
return render_template(
'sample.html',
title=(u'Härre'),
year=datetime.now().year,
message = (u"Härre guut")
)
当您将 non-ASCII 嵌入到您的源代码中时,设置源代码顶部的 'coding' 位。确保您的编辑器的字符编码与 coding
header 匹配。
# -*- coding: utf-8 -*-
我有以下代码:
return render_template(
'sample.html',
title=('Härre').decode('utf-8'),
year=datetime.now().year,
message = ("Härre guut").decode('utf-8')
)
以上代码运行良好。但是我想知道是否可以为特定的class启用特殊字符的自动解码?这样我的代码就变成了这样:
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框架使用。
如果你只是在谈论你正在输入的字符串,我会尝试在它们前面放一个 u
(例如 u'string'
)。 u
告诉 python 该字符串是 unicode。我过去曾在类似情况下成功地使用过它。
此外,根据 flask docs(底部的方式),要正确使用 # -*- coding: ...
位,您必须将文本编辑器设置为 UTF-8,否则它会保存在 ascii
,这可能就是您仍然收到该错误的原因。
冒着过于琐碎的风险,您可以使用 Python 3 使此解码自动进行,它使用 Unicode 而不是 ascii。
否则,正如 Brandon 指出的那样,您确实需要努力 Python 2 才能正确解码您的输入,在您的程序中使用 Unicode,在字符串前面加上令人敬畏的 'u',以及当您使用时的编码输出数据,通常是 utf-8,但任何适合你的。
在 "the edges" 处进行解码和编码,并在两者之间使用 Unicode,工作量很大,但很有必要。这是切换到 Python 3 的一个很好的理由。:-)
只需使用 u
前缀将您的字符串定义为 Unicode 字符串:
return render_template(
'sample.html',
title=(u'Härre'),
year=datetime.now().year,
message = (u"Härre guut")
)
当您将 non-ASCII 嵌入到您的源代码中时,设置源代码顶部的 'coding' 位。确保您的编辑器的字符编码与 coding
header 匹配。
# -*- coding: utf-8 -*-