解决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 datetime时间格式化去掉前导0
Jul 31 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
Python中的日期时间处理详解
Nov 17 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
python与caffe改变通道顺序的方法
Aug 04 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
使用python实现飞机大战游戏
Mar 23 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
python 自动识别并连接串口的实现
Jan 19 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 开发环境配置(Zend Server安装)
2010/04/28 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
jQuery实现瀑布流布局
2014/12/12 Javascript
JSON相关知识汇总
2015/07/03 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
手机端转换rem适应
2017/04/01 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
python实现网站的模拟登录
2016/01/04 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
法学专业应届生求职信
2013/10/16 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python