Flask jsonify支持UTF-8吗?

7

我一直在使用Flask和Jsonify进行实验,它能够正常工作。但是不支持UTF-8字符(土耳其字符)。我正在使用一个字典。

if api_key in key_list:
    quotes = {
                'ataturk':
                ['Hayatta En Hakiki Mursit Ilimdir Fendir',
                 'Birgün benim naciz bedenim'],
                  'mahatma gandhi':
                ['Happiness is when what you think, what you'
                 'say,and what you do are in harmony.']
             }

    get_quote = quotes[karakter(author.lower(), harfler)]

    quote = {
               'quotes': random.choice(get_quote),
            }

    return jsonify(quote)

我尝试了编码但是没有成功。我在调试模式下得到了以下错误信息:
AttributeError: 'dict' object has no attribute 'encode'
我该如何解决这个问题?

你能解释一下为什么要避免使用“Birg\u00fcn”吗?这是完全有效的JSON,当你解码JSON时,它将成为你想要的字符串。 - Robᵩ
2个回答

21

你是正确的,jsonify不支持UTF-8字符。但它完美支持Unicode字符。

考虑这两个程序:

# http server
from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/')
def root():
    return jsonify({'quote':'Birgün'})

if __name__=='__main__':
    app.run(debug=True)
# http client
import requests
import unicodedata
r = requests.get('http://localhost:5000/')
j = r.json()
u = j['quote'][4]
print("%s: %d %x %s\n"%(u, len(u), ord(u), unicodedata.name(u)))

正如您所看到的,http客户端获取JSON数据,对其进行解码,并检查"Birgün"中的"ü"。

结果应该清楚地表明,"ü"在端对端的旅程中存活下来了,从Python3字符串通过JSON和HTTP传输,再回到Python3字符串中。

ü: 1 fc LATIN SMALL LETTER U WITH DIAERESIS

编辑:话虽如此,有一个配置选项可以强制jsonify()按您所希望的方式运行:

app.config['JSON_AS_ASCII'] = False

1
更改配置选项对我有用:)使用此方法是否有任何缺点? - akashbw

0
在引号前加上 u,例如 u'引号 咔嚓 咔嚓 咔嚓'。

我想我误解了。我的输出像:Birgün benim naciz bedenim - Ali
我的代码可以运行。我的问题在于字符集。我认为 jsonify 不支持 utf-8 字符。以下是示例:Birgün benim naciz bedenimün 我不想要这个。ün == ü - Ali
让我们在聊天中继续这个讨论 - Ali
这并不难。你正在传递一个字典,只需更改带有返回值的那一行即可。 - alexisdevarennes
我已经尝试了你的代码。很抱歉,你没有理解我的意思。我已经尝试避免这种情况:http://i.hizliresim.com/y5pkGa.png - Ali
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接