【原创】flask json 中文乱码问题

1、使用 jsonify 返回 ASCII 码

使用 jsonify 返回中文时,出现如下乱码(其实是 ASCII 码)

解决:

为 flask 添加如下代码

flask_app.config['JSON_AS_ASCII'] = False

完整代码如下:

# -*- coding:utf-8 -*-

from flask import Flask

from flask_cors import CORS

from api.MovieAPI import movies

# initiate a flask object

flask_app = Flask(__name__, template_folder=”templates”, static_folder=”static”)

# support cross domain access

CORS(flask_app, supports_credentials=True)

# register blueprint

flask_app.register_blueprint(movies, url_prefix=”/movies”)

# don’t use json as ascii

flask_app.config[‘JSON_AS_ASCII’] = False

# set json sort key to false

flask_app.config[‘JSON_SORT_KEYS’] = False

if __name__ == ‘__main__’:

    flask_app.run(host=’0.0.0.0′, port=8082)

2、返回 json 中文乱码

如果发现加上 1 中的代码后,仍然出现乱码,如下:

也是由于直接使用 jsonify 返回时,没有 Content-Type 的 Headers

解决:

使用 flask response 方式返回,并且设置 Content-Type 的值

response = make_response(jsonify(json_string))
response.headers['Content-Type'] = 'application/json;charset=UTF-8'

修改前:

# -*- coding:utf-8 -*-
from flask import jsonify
from flask import make_response

def result_success(data):

    json_result = {

        “status”: “200”,

        “msg”: “request success”,

        “data”: data,

    }

    return jsonify(json_result)

def result_failed(msg, code=’400′):

    json_result = {

        “status”: code,

        “msg”: msg,

    }

    return jsonify(json_result)

修改后:

# -*- coding:utf-8 -*-
from flask import jsonify
from flask import make_response

JSON_RESPONSE_CONTENT_TYPE = ‘application/json;charset=UTF-8’

def _custom_response(json_string):

    response = make_response(jsonify(json_string))

    response.headers[‘Content-Type’] = JSON_RESPONSE_CONTENT_TYPE

    return response

def result_success(data):

    success_dict = {

        “status”: “200”,

        “msg”: “request success”,

        “data”: data

    }

    return _custom_response(success_dict)

def result_failed(msg, code=’400′):

    fail_dict = {

        “status”: code,

        “msg”: msg,

    }

    return _custom_response(fail_dict)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值