Python Can';t使用烧瓶显示unicode字符

Python Can';t使用烧瓶显示unicode字符,python,unicode,flask,jinja2,Python,Unicode,Flask,Jinja2,我的数据库中有一些字符串带有unicode字符,无法在我的网站上正确显示。然而,它在一种有趣的情况下正常工作 因此,当我这样做时,它会起作用: @app.route('/') def main(): return render_template('home.html', text = '\u00e9ps\u00e9g') # displays: épség 但当我执行此操作时,它不起作用(查询数据库并从结果传递字符串): 但是,当我使用与第一个解决方案的第二个版本完全相同的字符串时,它

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

因此,当我这样做时,它会起作用:

@app.route('/')
def main():
    return render_template('home.html', text = '\u00e9ps\u00e9g')
# displays: épség
但当我执行此操作时,它不起作用(查询数据库并从结果传递字符串):

但是,当我使用与第一个解决方案的第二个版本完全相同的字符串时,它可以完美地工作


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

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

>>> text = '\u00e9ps\u00e9g'
>>> print(text)
épség
>>> text = r'\u00e9ps\u00e9g'
>>> print(text)
\u00e9ps\u00e9g
要使用文字转义序列转换Unicode字符串,首先需要一个字节字符串,然后使用
Unicode\u转义
codec进行解码。要从带有非ASCII字符的文字转义码的Unicode字符串中获取字节字符串,请使用
ASCII
codec对其进行编码:

>>> 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''
>>>印刷品
“\u00e9ps\u00e9g\ud83c\udf0f”
>>>打印(json.loads)

épség你能检查
类型('\u00e9ps\u00e9g')
类型(文本字符串)
?你能提供你的getText()方法的代码吗?@NilsWerner这两种方法我都有。python2中的Unicode字符串表示为u'xyz.@NasefKhan我正在使用python 3.4谢谢你的标记!它工作得几乎完美。但是,对于一些表情符号,如
\ud83c\udf0f
,我遇到一个错误
utf-8'编解码器无法对4851位置的字符'\ud83c'进行编码:不允许使用代理。
。你知道这是什么原因吗?这些是完整的“表情代码”,我不明白它们有什么问题。@rihe您的文本源可能是JSON数据文件。JSON将U+FFFF上方的Unicode字符编码为UTF-16代理项对。我将添加一个例子。是的,它是JSON,我也忘记了双引号,但现在它是完全完美的!惊人的答案!
>>> text = r'\u00e9ps\u00e9g'
>>> print(text)
\u00e9ps\u00e9g
>>> print(text.encode('ascii').decode('unicode_escape'))
épség