解决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求斐波那契数列示例分享
Feb 14 Python
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
python设置值及NaN值处理方法
Jul 03 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
Python多线程原理与用法实例剖析
Jan 22 Python
详解用python写一个抽奖程序
May 10 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
python中自带的三个装饰器的实现
Nov 08 Python
python实现微信打飞机游戏
Mar 24 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
python实现PDF中表格转化为Excel的方法
Jun 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
写出高质量的PHP程序
2012/02/04 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
python实现socket客户端和服务端简单示例
2014/02/24 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
ubuntu上安装python的实例方法
2019/09/30 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
巴西网上药房:onofre
2016/11/21 全球购物
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
欢送退休感言
2014/02/08 职场文书
员工旷工检讨书
2015/08/15 职场文书
岗位聘任协议书
2015/09/21 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP