解决flask接口返回的内容中文乱码的问题


Posted in Python onApril 03, 2020

写一个简单的例子程序:

# 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')

运行后访问网页,内容中的中文显示乱码

解决方式:

给app配置app.config[‘JSON_AS_ASCII'] = False,即:

if __name__ == "__main__":
 app.run(host='127.0.0.1', port='8080')

变为:

if __name__ == "__main__":
 app.config['JSON_AS_ASCII'] = False
 app.run(host='127.0.0.1', port='8080')

补充知识:Flask中 request.files.get('file') 后的文件对象在读取时(中文)乱码

一、问题引出

我们通常需要接收前端发送过来的文件,而在Flask中通常采取file_obj = request.files.get(‘file') 的方式获取文件对象,按照Flask官方文档的介绍,返回值 file_obj 是一个文件对象,但是我们平常在使用时通常是在open() 函数中指定打开方式的,可是这里并不知道这个文件对象中的数据是何种编码方式,因此就会出现中文乱码的问题。如下所示:当上传的文件内容中包含中文时就会出现乱码:

file_obj = request.files.get('file')
file_content = file_obj.read()
print('答案内容为:', 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在得到这个文件对象时的编码方式。

三、解决办法

先从文件对象中将内容读出,然后再按照我们想要的格式解码(通常 utf-8)。

file_obj = request.files.get('file')
file_content = file_obj.read()
file_content = file_content.decode("utf-8")
print('答案内容为:', file_content)

这样文件中的中文内容就不会乱码了。

以上这篇解决flask接口返回的内容中文乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Python实现的径向基(RBF)神经网络示例
Feb 06 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
python找出完数的方法
Nov 12 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
Python调用接口合并Excel表代码实例
Mar 31 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
Python 爬虫的原理
Jul 30 Python
python如何实时获取tcpdump输出
Sep 16 Python
Python使用UDP实现720p视频传输的操作
Apr 24 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 #Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 #Python
python传到前端的数据,双引号被转义的问题
Apr 03 #Python
Django实现将一个字典传到前端显示出来
Apr 03 #Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 #Python
Django import export实现数据库导入导出方式
Apr 03 #Python
Django用户身份验证完成示例代码
Apr 03 #Python
You might like
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
php修改数组键名的方法示例
2017/04/15 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
初中英语课后反思
2014/04/25 职场文书
体育运动会广播稿
2014/10/05 职场文书
个人向公司借款协议书
2014/10/09 职场文书
技术入股合作协议书
2016/03/21 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers