一篇文章詳解json中文編碼問(wèn)題
json中文編碼問(wèn)題
在用flask寫(xiě)后端接口的時(shí)候,設(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默認(rèn)會(huì)將非ASCII字符轉(zhuǎn)義為Unicode編碼。中文字符在默認(rèn)情況下會(huì)被轉(zhuǎn)義成\uXXXX的形式
flask的響應(yīng)機(jī)制
flask的響應(yīng)機(jī)制主要是將視圖函數(shù)的返回值轉(zhuǎn)換為HTTP響應(yīng)。當(dāng)視圖函數(shù)返回一個(gè)字符串時(shí),flask會(huì)將其封裝成一個(gè)Response對(duì)象,并設(shè)置默認(rèn)的Content-Type為 text/html; charset=utf-8;當(dāng)返回字典或列表時(shí),flask會(huì)使用jsonify函數(shù)將其轉(zhuǎn)換為JSON響應(yīng)。
jsonfy
jsonify 是flask提供的一個(gè)便捷函數(shù),用于將 python 對(duì)象(如字典、列表)轉(zhuǎn)換為JSON響應(yīng)。它會(huì)自動(dòng)創(chuàng)建一個(gè)Response對(duì)象,默認(rèn)設(shè)置Content-Type為application/json

json.dumps
在flask里,jsonify函數(shù)其實(shí)是基于python的json.dumps來(lái)實(shí)現(xiàn)的。json.dumps默認(rèn)會(huì)把非 ASCII 字符轉(zhuǎn)義成 unicode 編碼形式。
可以通過(guò)設(shè)置ensure_ascii參數(shù)為False來(lái)避免這種轉(zhuǎn)義,并將 json.dumps 的結(jié)果包裝為 Response 對(duì)象,設(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中文編碼問(wèn)題的文章就介紹到這了,更多相關(guān)json中文編碼問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3實(shí)現(xiàn)跳一跳點(diǎn)擊跳躍
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)跳一跳點(diǎn)擊跳躍,玩跳一跳小游戲的思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
python連接mongodb操作數(shù)據(jù)示例(mongodb數(shù)據(jù)庫(kù)配置類(lèi))
這篇文章主要介紹了python連接mongodb操作數(shù)據(jù)示例,主要包括插入數(shù)據(jù)、更新數(shù)據(jù)、查詢(xún)數(shù)據(jù)、刪除數(shù)據(jù)等2013-12-12
Python正則表達(dá)式?r'(.*)?are?(.*?)?.*'的深入理解
日常的開(kāi)發(fā)工作中經(jīng)常會(huì)有處理字符串的需求,簡(jiǎn)單的字符串處理,我們使用python內(nèi)置的字符串處理函數(shù)就可以了,但是復(fù)雜的字符串匹配就需要借助正則表達(dá)式了,這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式?r‘(.*)?are?(.*?)?.*‘的相關(guān)資料,需要的朋友可以參考下2022-07-07
基于Python創(chuàng)建可定制的HTTP服務(wù)器
這篇文章主要為大家演示一下如何使用?http.server?模塊來(lái)實(shí)現(xiàn)一個(gè)能夠發(fā)布網(wǎng)頁(yè)的應(yīng)用服務(wù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-05-05
Python通過(guò)命令開(kāi)啟http.server服務(wù)器的方法
這篇文章主要給大家介紹了關(guān)于Python通過(guò)命令開(kāi)啟http.server服務(wù)器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
python函數(shù)調(diào)用,循環(huán),列表復(fù)制實(shí)例
這篇文章主要介紹了python函數(shù)調(diào)用,循環(huán),列表復(fù)制實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05

