解决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实现的登录和操作开心网脚本分享
Jul 09 Python
python使用post提交数据到远程url的方法
Apr 29 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
详解Django定时任务模块设计与实践
Jul 24 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
Python中Subprocess的不同函数解析
Dec 10 Python
Python tcp传输代码实例解析
Mar 18 Python
基于python连接oracle导并出数据文件
Apr 28 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
python元组拆包实现方法
Feb 28 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实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
关于this和self的使用说明
2010/08/01 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
JS在if中的强制类型转换方式
2018/07/15 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
物流管理毕业生自荐信范文
2014/03/15 职场文书
医学专业大学生求职信
2014/07/12 职场文书
500字小学生检讨书
2015/02/19 职场文书
退伍军人感言
2015/08/01 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技