flask jsonify支持UTF-8吗?

Ali*_*Ali 5 utf-8 flask python-3.x

我一直在做烧瓶和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)
Run Code Online (Sandbox Code Playgroud)

我尝试过编码,但它不起作用.我在调试模式下遇到此错误:

AttributeError:'dict'对象没有属性'encode'

我怎么解决这个问题?

Rob*_*obᵩ 16

你是对的,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)
Run Code Online (Sandbox Code Playgroud)

 

# 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)))
Run Code Online (Sandbox Code Playgroud)

如您所见,http客户端获取JSON,对其进行解码,并检查"Birgün"中的"ü".

结果应该清楚地表明,ü在端到端的旅行中幸存下来,从Python3字符串,到JSON和HTTP,再回到Python3字符串.

ü: 1 fc LATIN SMALL LETTER U WITH DIAERESIS
Run Code Online (Sandbox Code Playgroud)

编辑:说完所有这些,有一个配置选项,将强制jsonify()表现为你希望:

app.config['JSON_AS_ASCII'] = False
Run Code Online (Sandbox Code Playgroud)


ale*_*nes 0

在引号前添加 u,例如 u'quote bla bla bla'