解决flask接口返回的内容中文乱码的问题
写一个简单的例子程序:
# 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接口返回的内容中文乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考。
- Java基础(02)-15总结对象数组,集合Collection,集合List
- alert日志中的两种ORA错误分析(r6笔记第21天)
- 通过定制orabbix监控分析潜在的Oracle问题 (r6笔记第32天)
- 【C语言练手】C语言画太极图
- 关于奇怪的并行进程分析(一) (r6笔记第41天)
- 关于ora-02391问题的总结(r6笔记第40天)
- 一次数据库响应慢的问题诊断(r6笔记第39天)
- 贝叶斯分类器及Python实现
- R语言中文分词工具
- orabbix结合python发送图形报表(二) (r6笔记第38天)
- 14(01)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
- oracle的TAF浅析 (r6笔记第37天)
- R语言高级绘图命令(标题-颜色等)
- 14(02)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法