解決flask接口返回的內(nèi)容中文亂碼的問題
寫一個簡單的例子程序:
# coding:utf-8 import flask from flask import json, jsonify, request, render_template app = flask.Flask(__name__) @app.route("/api", methods=["GET", "POST"]) def api(): if request.method == 'GET': return jsonify({"login status": "成功1"}) elif request.method == "POST": data = request.get_data() data = json.loads(data) if data["name"] == "dom": return jsonify({"login": "成功2"}) else: return jsonify({"login": "fail"}) if __name__ == "__main__": app.run(host='127.0.0.1', port='8080')
運行后訪問網(wǎng)頁,內(nèi)容中的中文顯示亂碼
解決方式:
給app配置app.config[‘JSON_AS_ASCII'] = False,即:
if __name__ == "__main__": app.run(host='127.0.0.1', port='8080')
變?yōu)椋?/p>
if __name__ == "__main__": app.config['JSON_AS_ASCII'] = False app.run(host='127.0.0.1', port='8080')
補充知識:Flask中 request.files.get('file') 后的文件對象在讀取時(中文)亂碼
一、問題引出
我們通常需要接收前端發(fā)送過來的文件,而在Flask中通常采取file_obj = request.files.get(‘file') 的方式獲取文件對象,按照Flask官方文檔的介紹,返回值 file_obj 是一個文件對象,但是我們平常在使用時通常是在open() 函數(shù)中指定打開方式的,可是這里并不知道這個文件對象中的數(shù)據(jù)是何種編碼方式,因此就會出現(xiàn)中文亂碼的問題。如下所示:當上傳的文件內(nèi)容中包含中文時就會出現(xiàn)亂碼:
file_obj = request.files.get('file')
file_content = file_obj.read()
print('答案內(nèi)容為:', file_content)
二、解決過程探索
通過Flask的官方文檔及源碼得知:
request.files 包含了所有上傳文件的MultiDict對象。文件中的每個鍵都是來自 "的名稱。文件中的每個值都是一個Werkzeug FileStorage對象。參考:Flask API
而類 FileStorage 是被這樣描述的:FileStorage類是傳入文件的一個簡單包裝。請求對象使用它來表示上傳的文件。并且 FileStorage 提供了一些方法,最長用的就是如下幾個:參考:Werkzeug DataStructures
filename The filename of the file on the client.
name The name of the form field.
save (dst, buffer_size=16384)Save the file to a destination path or file object. If the destination is a file object you have to close it yourself after the call. The buffer size is the number of bytes held in memory during the copy process. It defaults to 16KB. 等等
但是并沒有找到Flask在得到這個文件對象時的編碼方式。
三、解決辦法
先從文件對象中將內(nèi)容讀出,然后再按照我們想要的格式解碼(通常 utf-8)。
file_obj = request.files.get('file')
file_content = file_obj.read()
file_content = file_content.decode("utf-8")
print('答案內(nèi)容為:', file_content)
這樣文件中的中文內(nèi)容就不會亂碼了。
以上這篇解決flask接口返回的內(nèi)容中文亂碼的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python web框架(django,flask)實現(xiàn)mysql數(shù)據(jù)庫讀寫分離的示例
- Flask接口如何返回JSON格式數(shù)據(jù)自動解析
- python+flask編寫一個簡單的登錄接口
- flask開啟多線程的具體方法
- 如何解決flask修改靜態(tài)資源后緩存文件不能及時更改問題
- Flask緩存靜態(tài)文件的具體方法
- Flask中sqlalchemy模塊的實例用法
- 詳解Flask前后端分離項目案例
- 基于python和flask實現(xiàn)http接口過程解析
- Python Flask微信小程序登錄流程及登錄api實現(xiàn)代碼
- Python flask框架實現(xiàn)查詢數(shù)據(jù)庫并顯示數(shù)據(jù)
- Python flask框架實現(xiàn)瀏覽器點擊自定義跳轉(zhuǎn)頁面
- Python flask框架如何顯示圖像到web頁面
- ajax post下載flask文件流以及中文文件名問題
- Docker部署Flask應(yīng)用的實現(xiàn)步驟
- Flask和pyecharts實現(xiàn)動態(tài)數(shù)據(jù)可視化
- flask 框架操作MySQL數(shù)據(jù)庫簡單示例
- 如何創(chuàng)建一個Flask項目并進行簡單配置
相關(guān)文章
Python3實現(xiàn)的Mysql數(shù)據(jù)庫操作封裝類
這篇文章主要介紹了Python3實現(xiàn)的Mysql數(shù)據(jù)庫操作封裝類,涉及Python針對mysql數(shù)據(jù)庫的連接、查詢、更新及關(guān)閉連接等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06在Python中封裝GObject模塊進行圖形化程序編程的教程
這篇文章主要介紹了在Python中封裝GObject模塊進行圖形化程序編程的教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04PyCharm2020.1.2社區(qū)版安裝,配置及使用教程詳解(Windows)
這篇文章主要介紹了PyCharm2020.1.2社區(qū)版安裝,配置及使用教程(Windows),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08簡單掌握Python中g(shù)lob模塊查找文件路徑的用法
glob模塊遵循Unix的shell規(guī)則來匹配文件名進行文件查找,下面我們結(jié)合匹配相關(guān)的字符區(qū)間與通配符知識,來簡單掌握Python中g(shù)lob模塊查找文件路徑的用法2016-07-07