问 题

使用python3完成一个简单的wsgi示例,代码如下:

from wsgiref.simple_server import make_server

def application(environ, start_response) :

print(environ['PATH_INFO'])

start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])

body = '

Hello, %s!

'%(environ['PATH_INFO'][1:] or 'web')

return [body.encode('utf-8')]

if __name__ == '__main__':

httpd = make_server('', 8000, application)

print('Serving HTTP on port 8000...')

httpd.serve_forever()

程序正常运行

但是输入中文时就出现了乱码:

后台显示通过environ获取参数时就已经出现乱码了:

请问我应该怎么修复这个问题,让中文正常显示?

解决方案

病急乱投医,找到了wsgiref.simple_server的源码,在WSGIRequestHandler的get_environ中看到了这么一句话:

env['PATH_INFO'] = urllib.parse.unquote_to_bytes(path).decode('iso-8859-1')

然后抱着试试看的心态修改了一下代码:

def application(environ, start_response) :

print(environ['PATH_INFO'].encode('iso-8859-1').decode('utf8'))

start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])

body = '

Hello, %s!

'%(environ['PATH_INFO'].encode('iso-8859-1').decode('utf8')[1:] or 'web')

return [body.encode('utf-8')]

然后奇迹般地,中文正常显示了。

不过还是不太明白,为什么wsgiref中硬编码iso-8859-1进行编码。

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

python3.7怎么安装wsgiref_python3.x - python3使用wsgiref时环境变量出现乱码相关推荐

  1. win7 64位 安装java jdk1.8 ,修改配置环境变量

    下载jdk1.8,下载地址:http://www.wmzhe.com/soft-30118.html 安装时有两个程序,都安装在同一个目录下.   win7 64位 安装java jdk1.8 ,修改 ...

  2. window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法

    window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...

  3. 更改多个版本java_window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法...

    window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...

  4. 安装IDEA的教程以及配置JDK环境变量

    安装IDEA的教程以及配置JDK环境变量 安装IDEA的教程 配置JDK环境变量 安装IDEA的教程 1.右击ideaIU-2020.2.3.exe ,选择 以管理员身份运行 图1 安装第一步 2.点 ...

  5. python3.8.2安装ipython_CentOS系统 python3+python2 Ipython安装

    https://www.cnblogs.com/albertrui/p/8093384.html 一.安装依赖环境 输入命令: yum -y install zlib-devel bzip2-deve ...

  6. mac卸载python3.7_工具安装-Mac 卸载python3

    1.终端版本 $ python3 2.删除框架 $ ls /Library/Frameworks/Python.framework/Versions/ 强制删除 $ sudo rm -rf /Libr ...

  7. 卸载64位python3.6再安装32位python3.6

    情景: 当初安装python时选择了64位,想着是对应电脑64位. 后来得知python32位能兼容32位和64位的电脑. 并且目前提供的pygame都是32位的,需要安装对应版本的python. 卸 ...

  8. 如何在本地安装tomcat、jdk并且配置tomcat环境变量(window7)

    先去官网下载JDK1.8以及tomcat8(我目前用的是apache-tomcat-8.0.35,有点陈旧了) 然后安装JDK以及解压tomcat压缩包到D盘根目录(其实你爱放哪里都可以,只要别放垃圾 ...

  9. windows下安装composer方法(不修改PATH环境变量)

    转载地址:http://www.th7.cn/Program/php/201410/297829.shtml composer是一个新崛起的PHP的依赖管理工具.官方安装方法见: https://ge ...

最新文章

  1. Linux 网络配置命令:ip、ss
  2. Android listview 的应用
  3. mysql 查询姓张或者姓王_mysql查询练习
  4. 列表根据下标取值_Python基础知识点——list(列表)讲解
  5. 教师编学科知识计算机,教师考试信息技术学科知识考什么_谈信息技术学科教师应该怎样教学...
  6. linux lnmp分布式集群,LNMP 分布式集群(六):keepalived 高可用方案
  7. 多级神经网络结构表达文档语义性能更好吗
  8. JavaScript 里变量名前面加了大括号代表什么含义
  9. javascript是一门多线程的语言_Javascript:10天设计一门语言
  10. 我滴个乖乖,我复现了Spring的漏洞,害怕!
  11. 关于Linux服务器改变为普通用户进行运维的操作手记
  12. LeetCode每周刷题(2019.6.24-2019.6.30)
  13. 利用图片指纹检测高相似度图片--相似图片搜索的原理
  14. Talib技术因子详解(七)
  15. w3cschool菜鸟教程php,JS实例学习笔记——w3cschool+菜鸟教程
  16. IT书籍电子书下载网站
  17. ATT CK 阶段之 Initial Access --Drive-by Compromise
  18. Pycharm Traceback (most recent call last):
  19. ARM架构——转自维基百科
  20. bzoj3899 弦论

热门文章

  1. executorservice 重启_iPhone7使用久了突然手机自动重启,多半原因出在这儿,进来看看...
  2. win8系统如何设置打印服务器,Win8系统怎么安装网络打印机|Win8系统安装网络打印机的方法...
  3. qnap raid5升级raid6_QNAP TS-419P组建RAID5后重建Transmission!
  4. dbscan论文_重点关注!我校论文被CCF A类人工智能国际顶级学术会议IJCAI录用
  5. IP65防水步进电机可以在什么环境使用?
  6. 光电整纬机常见操作问题
  7. check_mk自定义监控增加性能数据图形展示
  8. centos6.5lamp环境搭建
  9. 不一样的三一重工:重在选择 —— 三一集团CIO潘睿刚专访系列之一
  10. 判断年月日是否正确及获取当前天的前一天或前一个月