python用于url解码和中文解析的小脚本(python url decoder)


Posted in Python onAugust 11, 2013
# -*- coding: utf8 -*- 
#! python 
print(repr("测试报警,xxxx是大猪头".decode("UTF8").encode("GBK")).replace("\\x","%"))

注意第一个 decode("UTF8") 要与文件声明的编码一样。

最开始对这个问题的接触,来自于一个Javascript解谜闯关的小游戏,某一关的提示如下:

刚开始的几关都是很简单很简单的哦~~这一关只是简单的字符串变形而已…..

后面是一大长串开头是%5Cu4e0b%5Cu4e00%5Cu5173%5Cu7684这样的字符串。
这种东西以前经常在浏览器的地址栏见到,就是一直不知道怎么转换成能看懂的东东,
网上google了一下,结合python的url解码和unicode解码,解决方式如下:

import urllib escaped_str="%5Cu4e0b%5Cu4e00%5Cu5173%5Cu7684%5Cu9875%5Cu9762%5Cu540d%5Cu5b57%5Cu662f%5Cx20%5Cx69%5Cx32%5Cx6a%5Cx62%5Cx6a%5Cx33%5Cx69%5Cx34%5Cx62%5Cx62%5Cx35%5Cx34%5Cx62%5Cx35%5Cx32%5Cx69%5Cx62%5Cx33%5Cx2e%5Cx68%5Cx74%5Cx6d"
print urllib.unquote(escaped_str).decode('unicode-escape')

最近,我对firefox的autoproxy插件中的gfwlist中的中文词汇(用过代理的同学们,你们懂的)产生了兴趣,然而这些网址都是用url编码的,比如http://zh.wikipedia.org/wiki/%E9%97%A8,需要使用正则表达式将被url编码的中文字符提取出来,写了个小脚本如下:

import urllib 
import re 
with open("listfile","r") as f: 
    for url_str in f: 
        match=re.compile("((%\w{2}){3,})").findall(url_str) 
        #汉字url编码的样式是:百分号+2个十六进制数,重复3次         if match!=None: 
            #如果匹配成功,则将提取出的部分转换为中文 
            for trans in match: 
                print urllib.unquote(trans[0]),

然而这个脚本仍有一些缺点,对于列表文件中的某些中文字符仍然不能正常解码,比如下面这几行测试代码

import urllib 
a="http://zh.wikipedia.org/wiki/%BD%F0%B6"
b="http://zh.wikipedia.org/wiki/%E9%97%A8"
de=urllib.unquote 
print de(a),de(b)

输出结果就是前者可以正确解码,而后者不可以,个人觉得原因可能和big5编码有关,如果谁知道什么解决办法,还请告诉我一下~

以下是补充:

de(a).decode(“gbk”,”ignore”)
de(b).decode(“utf8″,”ignore”)

??幽憧梢缘玫竭@些字串的unicode??。

你用的unquote不是decoder, 你需要作必要的decode和encode。我一直用utf8作我默??境的,我?得你大概用的gbk吧,所以後者的解?你那?失?×恕2戮??是很累的事情,如果大家都用utf8倒也好,但是有些人??T了gb。

http://yac163.svn.sourceforge.net/viewvc/yac163/trunk/yac163-nox/Pic.py?revision=198&view=markup

?⒖嘉疫@??很古老code?面的#102-147行 ?每??decode和encode?用加上(…,”ignore”)。

def strdecode( string,charset=None ):
     if isinstance(string,unicode):
         return string
     if charset:
         try:
             return string.decode(charset)
         except UnicodeDecodeError:
             return _strdecode(string)
     else:
         return _strdecode(string)
 def _strdecode(string):
     try:
         return string.decode('utf8')
     except UnicodeDecodeError:
         try:
             return string.decode('gb2312')
         except UnicodeDecodeError:
             try:
                 return string.decode('gbk')
             except UnicodeDecodeError:
                 return string.decode('gb18030')
 def strencode( string,charset=None ):
     if isinstance(string,str):
         return string
     if charset:
         try:
             return string.encode(charset)
         except UnicodeEncodeError:
             return _strencode(string)
     else:
         return _strencode(string)
 def _strencode(string):
     try:
         return string.encode('utf8')
     except UnicodeEncodeError:
         try:
             return string.encode('gb2312')
         except UnicodeEncodeError:
             try:
                 return string.encode('gbk')
             except UnicodeEncodeError:
                 return string.encode('gb18030')
Python 相关文章推荐
Python中条件选择和循环语句使用方法介绍
Mar 13 Python
python利用datetime模块计算时间差
Aug 04 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
对Python中内置异常层次结构详解
Oct 18 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
Python列表list常用内建函数实例小结
Oct 22 Python
python 创建一维的0向量实例
Dec 02 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 Python
python 合并文件的具体实例
Aug 08 #Python
python备份文件以及mysql数据库的脚本代码
Jun 10 #Python
Python 变量类型及命名规则介绍
Jun 08 #Python
Python 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 #Python
python strip()函数 介绍
May 24 #Python
Python的词法分析与语法分析
May 18 #Python
简单文件操作python 修改文件指定行的方法
May 15 #Python
You might like
德生PL330的评价与改造
2021/03/02 无线电
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
基于JQuery制作的产品广告效果
2010/12/08 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
python爬虫添加请求头代码实例
2019/12/28 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
澳洲的服装老品牌:SABA
2018/02/06 全球购物
应届毕业生自我鉴定范文
2013/12/27 职场文书
通信研究生自荐信
2014/02/01 职场文书
个人工作表现评语
2014/04/30 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
创业计划书之校园超市
2019/09/12 职场文书
python绘制箱型图
2021/04/27 Python
python 批量压缩图片的脚本
2021/06/02 Python
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS