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实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
VSCode下好用的Python插件及配置
Apr 06 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
Tensorflow分批量读取数据教程
Feb 07 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
Django日志及中间件模块应用案例
Sep 10 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 Python
python中tkinter复选框使用操作
Nov 11 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
php多维数组去掉重复值示例分享
2014/03/02 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
php实现json编码的方法
2015/07/30 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
从Python程序中访问Java类的简单示例
2015/04/20 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python递归函数实例讲解
2019/02/27 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
python argparser的具体使用
2019/11/10 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
普通党员整改措施
2014/10/24 职场文书
2015元旦节寄语
2014/12/08 职场文书
师德师风学习材料
2014/12/19 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
交通安全月活动总结
2015/05/08 职场文书
2015入党自传格式范文
2015/06/26 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS