python中urllib.unquote乱码的原因与解决方法
发布时间 - 2026-01-11 00:48:07 点击率:次发现问题

Python中的urllib模块用来处理url相关的操作,unquote方法对应javascript中的urldecode方法,它对url进行解码,把类似"%xx"的字符替换成单个字符,例如:“%E6%B3%95%E5%9B%BD%E7%BA%A2%E9%85%92”解码后会转换成“法国红酒”,但是使用过程中,如果姿势不对,最终转换出来的字符会是乱码“法国红酔。
笔者在一个真实的Tornado应用中就遇到了这样的问题,浏览器通过请求传递到后台后,获取参数的值后:
name = self.get_argument("name", "")
name = urllib.unquote(name)
# save to db
name的值打印出来的显示的是:“%E6%B3%95%E5%9B%BD%E7%BA%A2%E9%85%92”,看起来没什么问题,但结果最终保存到数据库中的时候就成了一串乱码“法国红酔,这个问题实在是让人百思不得其解。
原因分析
于是想用直接编码的字符来处理看看是否会出现乱码:
name = '%E6%B3%95%E5%9B%BD%E7%BA%A2%E9%85%92' name = urllib.unquote(name) # save to db
发现这种方式处理没有任何问题,name的值解码之后就是“法国红酒”,经过一番思考,原因只可能是出在self.get_argument("name")这处代码段了。原来,get_argument默认返回的是值的类型是unicode,而unquote方法处理unicode类型的字符时,直接返回的就是:
u'\xe6\xb3\x95\xe5\x9b\xbd\xe7\xba\xa2\xe9\x85\x92'
注意:这里返回的值类型是unicode,也就是说unquote方法接收参数类型是unidoe,返回的值类型也是unicode,只不过是把"%"替换成了'\x',最终由:
u"%E6%B3%95%E5%9B%BD%E7%BA%A2%E9%85%92"
替换为了:
u"\xe6\xb3\x95\xe5\x9b\xbd\xe7\xba\xa2\xe9\x85\x92"
而u"\xe6\xb3\x95\xe5\x9b\xbd\xe7\xba\xa2\xe9\x85\x92"完全就是一个ascii码字符串,只不过是用16进制表示的,我们再来看看'e6','b3'....分别对应ascii中的什么字符。你可以参考网址:http://www.ascii-code.com,'e6'是一个扩展的ascii字符,在128-255区间范围内,他对应的符号就是'æ'
DEC OCT HEX BIN Symbol 230 346 E6 11100110 æ
现在你应该明白为什么会生成乱码字符:
法国红é
解决办法
在调用self.get_argument('name')方法之后,把返回的值转换成str类型:
name = self.get_argument("name", "")
name = str(name)
name = urllib.unquote(name)
# save to db
转换称str类型的字符串之后,相当于调用:
'\xe6\xb3\x95\xe5\x9b\xbd\xe7\xba\xa2\xe9\x85\x92'.decode("utf-8")
>>> u'\u6cd5\u56fd\u7ea2\u9152'
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python
# unquote
# 乱码
# urllib
# urllib.unquote
# 解决python 3 urllib 没有 urlencode 属性的问题
# Python3中urlencode和urldecode的用法详解
# Python2和Python3中urllib库中urlencode的使用注意事项
# Python3的urllib.parse常用函数小结(urlencode
# quote
# quote_plus
# unquote_plus等)
# Python urlencode和unquote函数使用实例解析
# 的是
# 法国
# 转换成
# 是一个
# 让人
# 成了
# 你可以
# 只不过是
# 没有任何
# 这个问题
# 再来
# 百思不得其解
# 你应该
# 这篇文章
# 谢谢大家
# 后会
# 想用
# 中就
# 是否会
# 解决办法
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Java垃圾回收器的方法和原理总结
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
使用豆包 AI 辅助进行简单网页 HTML 结构设计
Bootstrap整体框架之JavaScript插件架构
如何在阿里云通过域名搭建网站?
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel如何生成URL和重定向?(路由助手函数)
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Bootstrap整体框架之CSS12栅格系统
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
QQ浏览器网页版登录入口 个人中心在线进入
如何快速搭建高效可靠的建站解决方案?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
如何获取免费开源的自助建站系统源码?
微信小程序 wx.uploadFile无法上传解决办法
什么是javascript作用域_全局和局部作用域有什么区别?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
中山网站制作网页,中山新生登记系统登记流程?
如何用AWS免费套餐快速搭建高效网站?
Firefox Developer Edition开发者版本入口
如何在搬瓦工VPS快速搭建网站?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
详解CentOS6.5 安装 MySQL5.1.71的方法
如何快速搭建虚拟主机网站?新手必看指南
如何快速上传自定义模板至建站之星?
Python文件操作最佳实践_稳定性说明【指导】
javascript读取文本节点方法小结
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
如何在IIS中新建站点并配置端口与物理路径?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
html如何与html链接_实现多个HTML页面互相链接【互相】
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
如何在Windows环境下新建FTP站点并设置权限?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Laravel distinct去重查询_Laravel Eloquent去重方法
敲碗10年!Mac系列传将迎来「触控与联网」双革新
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
如何在企业微信快速生成手机电脑官网?

