一篇文章詳解json中文編碼問題
json中文編碼問題
在用flask寫后端接口的時候,設(shè)置的接口返回格式是這樣的:
from flask import jsonify
def generate_response(data=None, message=None, code=200):
res_data = {
"data": data if data is not None else [],
"success": "true",
"message": message
}
return jsonify(res_data)
在瀏覽器看到的結(jié)果中,中文變成了編碼格式

而在postman中可以看到正常的數(shù)據(jù)

這是由于flask默認會將非ASCII字符轉(zhuǎn)義為Unicode編碼。中文字符在默認情況下會被轉(zhuǎn)義成\uXXXX的形式
flask的響應(yīng)機制
flask的響應(yīng)機制主要是將視圖函數(shù)的返回值轉(zhuǎn)換為HTTP響應(yīng)。當視圖函數(shù)返回一個字符串時,flask會將其封裝成一個Response對象,并設(shè)置默認的Content-Type為 text/html; charset=utf-8;當返回字典或列表時,flask會使用jsonify函數(shù)將其轉(zhuǎn)換為JSON響應(yīng)。
jsonfy
jsonify 是flask提供的一個便捷函數(shù),用于將 python 對象(如字典、列表)轉(zhuǎn)換為JSON響應(yīng)。它會自動創(chuàng)建一個Response對象,默認設(shè)置Content-Type為application/json

json.dumps
在flask里,jsonify函數(shù)其實是基于python的json.dumps來實現(xiàn)的。json.dumps默認會把非 ASCII 字符轉(zhuǎn)義成 unicode 編碼形式。
可以通過設(shè)置ensure_ascii參數(shù)為False來避免這種轉(zhuǎn)義,并將 json.dumps 的結(jié)果包裝為 Response 對象,設(shè)置響應(yīng)頭。
def generate_response(data=None, message=None, code=200):
res_data = {
"data": data if data is not None else [],
"success": "true",
"message": message
}
return Response(
json.dumps(res_data, ensure_ascii=False),
content_type='application/json; charset=utf-8',
status=code
)

總結(jié)
到此這篇關(guān)于json中文編碼問題的文章就介紹到這了,更多相關(guān)json中文編碼問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基礎(chǔ)教程之五種數(shù)據(jù)類型詳解
這篇文章主要介紹了python基礎(chǔ)教程之五種數(shù)據(jù)類型詳解的相關(guān)資料,這里對Python 的數(shù)據(jù)類型進行了詳細介紹,需要的朋友可以參考下2017-01-01
Python爬蟲程序中使用生產(chǎn)者與消費者模式時進程過早退出的問題
本文主要介紹了Python爬蟲程序中使用生產(chǎn)者與消費者模式時進程過早退出的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
Python selenium爬取微博數(shù)據(jù)代碼實例
這篇文章主要介紹了Python selenium爬取微博數(shù)據(jù)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05
python3列表刪除大量重復(fù)元素remove()方法的問題詳解
這篇文章主要給大家介紹了關(guān)于python3列表刪除大量重復(fù)元素remove()方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01

