解决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数组复制拷贝的实现方法
Jun 09 Python
Python利用ansible分发处理任务
Aug 04 Python
Python中动态创建类实例的方法
Mar 24 Python
基于Python List的赋值方法
Jun 23 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
通过pykafka接收Kafka消息队列的方法
Dec 27 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
详解python中各种文件打开模式
Jan 19 Python
Python安装tar.gz格式文件方法详解
Jan 19 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
利用Python优雅的登录校园网
Oct 21 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的宝库目录--PEAR
2006/10/09 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
ionic3 懒加载
2017/08/16 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
分享Python文本生成二维码实例
2016/01/06 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
教师自我评价范文
2013/12/16 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript