解决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实现端口转发器的方法
Mar 13 Python
Python批量转换文件编码格式
May 17 Python
Python下Fabric的简单部署方法
Jul 14 Python
python实现给数组按片赋值的方法
Jul 28 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
Python学习之异常中的finally使用详解
Mar 16 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 Session机制简介及用法
2014/08/19 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
列表内容的选择
2006/06/30 Javascript
大家未必知道的Js技巧收藏
2008/04/07 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
python实现求最长回文子串长度
2018/01/22 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
python写入文件自动换行问题的方法
2019/07/05 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
印尼购物网站:iLOTTE
2019/10/16 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
党章培训心得体会
2014/09/04 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
资料员岗位职责
2015/02/10 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书