解决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怎么学好python?
Oct 07 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
使用python存储网页上的图片实例
May 22 Python
python学生信息管理系统(初级版)
Oct 17 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
python字符串Intern机制详解
Jul 01 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
python实现从wind导入数据
Dec 03 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
smarty缓存用法分析
2014/12/16 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
ASP中Sub和Function的区别说明
2020/08/30 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
在python中求分布函数相关的包实例
2020/04/15 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
职业生涯规划怎么写
2013/12/29 职场文书
JavaScript原型链详解
2021/11/07 Javascript