解决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 相关文章推荐
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
浅析python递归函数和河内塔问题
Apr 18 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
Python实现端口检测的方法
Jul 24 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
Python 创建TCP服务器的方法
Jul 28 Python
Python+kivy BoxLayout布局示例代码详解
Dec 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
Smarty安装配置方法
2008/04/10 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
追悼会主持词
2014/03/20 职场文书
保护动物倡议书
2014/04/15 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年维修工作总结
2014/11/22 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
作文之亲情600字
2019/09/23 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
Java后台生成图片的完整步骤
2021/08/04 Java/Android
Hive常用日期格式转换语法
2022/06/25 数据库