解决flask接口返回的内容中文乱码的问题
作者:dushu990 发布时间:2022-12-17 03:00:37
写一个简单的例子程序:
# 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)
这样文件中的中文内容就不会乱码了。
来源:https://blog.csdn.net/dushu990/article/details/79978685


猜你喜欢
- 1、问题现象:2、解决办法:editor的字体设置为DialogInput补充知识:Python +Selenium 支持多项目集中配置文件
- 1. 安装yaml库想要使用python实现yaml与json格式互相转换,需要先下载pip,再通过pip安装yaml库。如何下载以及使用p
- 在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序。 那么,使用 order_by() 这个方法就可以
- 对win32 COM不是很熟悉,不知道一个程序究竟有多少属性或者方法可以操作。仅仅是一个Sheet页的添加就费了我好长时间,因为这种成功来自
- 每年意甲德甲英超西甲各大联赛的赛程表都是球迷们的必看之物,想起之前写过的一段生成赛程表的代码,用Python来写这类东西太舒服了。这个算法叫
- python中pass的作用?pass代表一个空的语句块Python中pass的作用:示例1,定义一个类,类中没有任何内容保存,运行之后,该
- 列表对象pop()方法的使用pop() 方法用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。语法:verse.pop(in
- unittest模块是Python自带的一个单元测试模块,我们可以用来做单元测试。unittest模块包含了如下几个子模块:测试用例:Tes
- 用header 发送cookie header("Set-Cookie: testcookie=中文
- 前言JSon 数据中的String 传递数据时,需要处理好特殊字符.本文主要给大家总结介绍了关于golang、rust、java和Pytho
- 从文本文件中读入浮点数据,是最常见的任务之一,python没有scanf这样的输入函数,但我们可以利用正规表达式从读入的字符串中提取出浮点数
- binascii模块用法binascii模块用于在二进制和ASCII之间转换>> import binascii# 将binar
- 前言在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定
- 在《多进程并发与同步》中介绍了进程创建与信息共享,除此之外python还提供了更方便的进程间通讯方式。进程间通讯multiprocessin
- 以下是服务端代码var HTTPREQUEST_PROXYSETTING_DEFAULT = 0;var&nb
- 一、查询当前部门下的所有子部门WITH dept AS ( SELECT *
- 本文实例为大家分享了python实现单线程多任务非阻塞TCP服务端的具体代码,供大家参考,具体内容如下# coding:utf-8from
- 目录问题描述解决方案问题分析问题描述在 MySQL 中使用 delete 语句删除数据之后,监控视图中可用的磁盘空间没有增加,磁盘使用率没有
- 自己前端开发中常用到的一些技巧及问题解决方法,会常更新,希望对前端路上的朋友有帮助。1、文章标题列表中日期居右显示的方法(提供了两种方法,使
- 创建游戏文件 2048.py首先导入需要的包:import cursesfrom random import randrange, choi