无法使用Flask显示unicode字符

时间:2017-04-08 16:15:01

标签: python unicode flask jinja2

我的数据库中有一些带有unicode字符的字符串,我无法在我的网站上正确显示。然而,它在一个有趣的情况下正常工作。

所以当我这样做时它会起作用:

@app.route('/')
def main():
    return render_template('home.html', text = '\u00e9ps\u00e9g')
# displays: épség

但是当我这样做时它不起作用(查询数据库并从结果中传递字符串):

@app.route('/')
def main():
    text_string = getText()
    return render_template('home.html', text = text_string )
# displays: \u00e9ps\u00e9g

然而,当我使用与第一个解决方案的第二个版本完全相同的字符串时,它可以完美地运行。

我真的很感激,如果有人能告诉我为什么第一个解决方案工作,为什么不能解决问题。两个字符串应该是相同的,但是当我从服务器获取它时,它显示它时保持不变。当我手动添加它时它又好了。但不幸的是,我有数百个字符串,所以我需要使用第二个字符串。

1 个答案:

答案 0 :(得分:2)

在一种情况下,您所拥有的是 unicode-escape 序列,它们代表一个Unicode字符。在另一种情况下,你有文字字符\,u,...代表六个字符。这可以使用原始字符串来说明,它忽略Unicode转义序列:

>>> text = '\u00e9ps\u00e9g'
>>> print(text)
épség
>>> text = r'\u00e9ps\u00e9g'
>>> print(text)
\u00e9ps\u00e9g

要使用文字转义序列转换Unicode字符串,首先需要一个字节字符串,然后使用unicode_escape编解码器进行解码。要从带有非ASCII字符的文字转义码的Unicode字符串中获取字节字符串,请使用ascii编解码器对其进行编码:

>>> text = r'\u00e9ps\u00e9g'
>>> print(text)
\u00e9ps\u00e9g
>>> print(text.encode('ascii').decode('unicode_escape'))
épség

根据您的评论,您可能拥有JSON数据文件中的文本。如果它是正确的JSON,这应解码它:

>>> s = r'"\u00e9ps\u00e9g \ud83c\udf0f"'
>>> print(s)
"\u00e9ps\u00e9g \ud83c\udf0f"
>>> print(json.loads(s))
épség 

请注意引用了JSON字符串。没有双引号就不能解码。