当前位置: 首页 > news >正文

Flask+Gunicorn中文乱码解决方案

在使用Flask+Gunicorn部署应用时,发现中文的输出存在乱码的现象。这是因为Python的默认编码是ASCII,而ASCII并不支持中文字符。

解决Python中文乱码问题的首要任务是确保使用合适的编码方式。当你处理中文字符时,应该使用UTF-8编码。UTF-8是一种支持多种字符集的编码方式,包括中文字符。

一、关于编码的背景知识

首先我们来谈一谈编码这个东西,由于计算机是美国人发明的,最早的编码里面仅仅有数字字母以及一些符号,不包含中文汉字,这个编码表我们常称为ASCII码表。

而要处理中文的时候,原来的ASCII码表就不够用了,需要使用两个字节来保存一个汉字,于是中国制定了GB2312编码,不会与原来的ASCII码表冲突,又可以用来表示中文汉字。但中国会把汉字弄成GB2312编码(也可以叫GBK编码),其他国家比如韩国会把韩文弄一个编码集,日本会弄一个日文编码集,因此在多语种文本中,这样的编码就势必会造成编码冲突,显示出来的时候,呈现出所谓的乱码。

因此,Unicode编码诞生了,这种编码可以把所有的语言都放到一种编码之中,这样就不会有乱码出现了。默认来讲,Unicode编码占用2个字节(一些偏僻文字可能占用4个),Ascii码占用一个字节。如果都用Unicode编码来写文件,那乱码肯定消失了,但你会发现,如果你的文件绝大多数文字都是一些ascii码可以覆盖的内容的话,使用Unicode的编码就会极大的占用空间了。

因此,又发明了可变长编码“UTF8”(或utf-8)。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

大概的知识就是这样,因此我们总结出了现在常见的ASCII,Unicode,utf-8三种编码。

由于python比unicode的诞生还要早,因此最早的python只支持ascii码,而后来的版本python加入了unicode的支持。

二、解决中文乱码

具体可以通过以下几种方案来解决。

方法1:在app.config中设置编码

创建app示例时,设置对应的编码格式为UTF-8,代码如下:

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
app.config['JSONIFY_MIMETYPE'] = 'application/json;charset=UTF-8'

Flask在创建app时,默认开启ASCII编码模式,可以通过 app.config['JSON_AS_ASCII'] = False 关闭ASCII编码模式。

  • 在比较新的版本的Flask中,app.config['JSON_AS_ASCII'] = False 已经被弃用,更改为app.json.ensure_ascii = False
  • 如果在Flask中有使用jsonify来生成response,可以使用 app.config['JSONIFY_MIMETYPE'] = 'application/json;charset=UTF-8'
from flask import Flask, jsonifyapp = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
app.config['JSONIFY_MIMETYPE'] = 'application/json;charset=UTF-8'students = [{"id": 1, "name": '李红'},{"id": 2, "name": '张明'}
]@app.route('/students/list')
def students_list():return jsonify(students)if __name__ == '__main__':app.run()

方法2:设置response的编码格式

from flask import Flask, jsonify, request, make_responseapp = Flask(__name)@app.route('/students/list')
def students_list():data = get_students_list()res_data = {'code': 200,'data': data,'message': 'success'}response = make_response(jsonify(res_data))response.headers['Content-Type'] = 'application/json;charset=UTF-8'return response

方法3:设置Python解释器的编码环境

如果上面的方法都不适用,可以查看下系统的python版本。我在开发环境的python 3环境中是正常显示的,但是到了生产环境(CentOS 7.9,python 2.7)中便出现乱码现象。

这是因为对于python 2.7来说,默认的编码不支持中文。可以通过设置Python解释器的编码环境变量来全局解决中文乱码问题。

由于我这里使用了docker进行部署,所以只需要在Dockerfile中加上如下语句:

ENV PYTHONIOENCODING=UTF-8

参考资料

  • python接口使用flask_jsonify后响应unicode编码改UTF-8编码
  • 解决Python中文乱码问题的策略与技巧

相关文章:

Flask+Gunicorn中文乱码解决方案

在使用FlaskGunicorn部署应用时,发现中文的输出存在乱码的现象。这是因为Python的默认编码是ASCII,而ASCII并不支持中文字符。 解决Python中文乱码问题的首要任务是确保使用合适的编码方式。当你处理中文字符时,应该使用UTF-8编码。UTF-8是一…...

vue3的开发小技巧

「总之岁月漫长&#xff0c;然而值得等待。」 目录 父组件调用子组件函数 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });...

十三、Qt多线程与线程安全

一、多线程程序 QThread类提供了管理线程的方法&#xff1a;一个对象管理一个线程一般从QThread继承一个自定义类&#xff0c;重载run函数 1、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QDialog &#xff08;2&#xff09;添加类&#xff0c;修改基于QThr…...

今日话题:---自卑

自卑是一种普遍存在的心理现象&#xff0c;它可能源于个人对自身能力、外貌、社会地位等方面的不满意或不自信。自卑感可能会导致消极的情绪和行为&#xff0c;如焦虑、抑郁、逃避现实等。然而&#xff0c;适度的自卑感也可能激发个人努力提升自己&#xff0c;从而实现自我成长…...

Unity 预制体与变体

预制体作用&#xff1a; 更改预制体&#xff0c;则更改全部的以预制体复制出的模型。 生成预制体&#xff1a; 当你建立好了一个模型&#xff0c;从层级拖动到项目中即可生成预制体。 预制体复制模型&#xff1a; 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…...

leetcode:860.柠檬水找零

题意&#xff1a;按照支付顺序&#xff0c;进行支付&#xff0c;能够正确找零。 解题思路&#xff1a;贪心策略&#xff1a;针对支付20的客人&#xff0c;优先选择消耗10而不是消耗5&#xff0c;因为5可以用来找零10或20. 代码实现&#xff1a;有三种情况&#xff08;代表三种…...

Python程序的流程

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 年轻是我们唯一拥有权利去编制梦想的时…...

C语言可以干些什么?C语言主要涉及哪些IT领域?

C语言可以干些什么&#xff1f;C语言主要涉及哪些IT领域&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家…...

element-ui附件上传及在线查看详细总结,后续赋源码

一、附件上传 1、在element-ui上面复制相应代码 a、accept"image/*,.pdf,.docx,.xlsx,.doc,.xls" 是规定上传文件的类型&#xff0c;若是不限制&#xff0c;可以直接将accept‘all即可&#xff1b; b、:action"action" 这个属性就是你的上传附件的地址&am…...

投标中excel表格常用功能梳理

投标中excel表格常用功能梳理&#xff1a; 1.投标报价调整报价的办法&#xff1a; 目的调整报价&#xff0c;把“红框”的报价增加30%&#xff0c;50% 增加30%的步骤&#xff1a; 步骤1&#xff1a;选择1.3 复制&#xff08;ctrlc&#xff09; 步骤2&#xff1a;选择性黏贴 …...

C++二叉搜树的实现(递归和非递归)

目录 1.什么是二叉搜索树 2.二叉搜索树的查找 3.二叉搜索树插入 4.二叉搜索树的删除 1.删除的节点只有左子树或者右子树 2.删除节点左右子树都有的情况 5.代码 1.什么是二叉搜索树 左节点的值小于根节点 右节点大于根节点 左右子树也满足上面两个条件 例&#xff1a;…...

蓝桥杯算法 一.

分析&#xff1a; 本题记录&#xff1a;m个数&#xff0c;异或运算和为0&#xff0c;则相加为偶数&#xff0c;后手获胜。 分析&#xff1a; 369*99<36500&#xff0c;369*100>36500。 注意&#xff1a;前缀和和后缀和问题...

如何学习自然语言处理之语言模型

自然语言处理&#xff08;NLP&#xff09;是一种人工智能技术&#xff0c;它使计算机能够理解和处理人类语言。而语言模型是NLP中的一个重要概念&#xff0c;主要是用来估测一些词的序列的概率&#xff0c;即预测p(w1, w2, w3 … wn)&#xff0c;其中一个应用就是句子的生成。 …...

Zoho ToDo 满足您的需求:任务管理满足隐私和安全要求

任务管理工具已经成为我们日常生活中不可或缺的一部分&#xff0c;它们帮助我们处理各种事务&#xff0c;从杂项和愿望清单到管理截止日期和资源。这些工具不仅仅是简单的任务列表&#xff0c;它们掌握了项目的蓝图、雄心勃勃的目标和完成的最后期限。然而随着这些工具的使用越…...

仿牛客网项目---社区首页的开发实现

从今天开始我们来写一个新项目&#xff0c;这个项目是一个完整的校园论坛的项目。主要功能模块&#xff1a;用户登录注册&#xff0c;帖子发布和热帖排行&#xff0c;点赞关注&#xff0c;发送私信&#xff0c;消息通知&#xff0c;社区搜索等。这篇文章我们先试着写一下用户的…...

虚拟机部署Sentry步骤,国内地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

[Android View] 可绘制形状 (Shape Xml)

一切以官方文档为主 官方文档https://developer.android.com/guide/topics/resources/drawable-resource?hlzh-cn#Shape 什么是可绘制形状 可以理解为用xml文件来描述一个简单的Drawable图形&#xff0c;比如说以下这段xml就可以用来描述一个白色的圆形&#xff1a; <?…...

[游戏开发][虚幻5]新建项目注意事项

鼠标右键点击Client.uproject文件&#xff0c;可以看到三个比较关键的选项&#xff0c; 启动游戏&#xff0c;生成sln解决方案&#xff0c;切换引擎版本 断点调试 C代码重要步骤 如果你想断点调试C代码&#xff0c;则必须使用使用代码编译启动引擎&#xff0c;你需要做几个操作…...

防考试作弊切屏

防考试作弊切屏 方法一&#xff1a;监听页面失焦聚焦事件&#xff1a;防止任何操作 监听考试页面失焦事件记录切出时间页面聚焦时累积记录切入时间&#xff0c;累积时间大于1分钟自动交卷并移除时间页面销毁移出事件***bug&#xff1a;必须把事件回调定义为方法&#xff0c;在…...

浅析能耗监测系统在大型数据中心的应用

彭姝麟 Acrelpsl 1总体设计 大型数据中心能耗监测系统包含硬件和软件两大部分&#xff0c;其硬件组成主要包括监控服务器、主机设备、网络设备、环境参数传感器、通风模块等&#xff0c;总体采集逻辑采用三级监控体系。一级为主机设备&#xff0c;作为系统的应用层&#xff0c…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...