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初学者的一些编程技巧
Apr 03 Python
Python合并字符串的3种方法
May 21 Python
Python统计单词出现的次数
Apr 04 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
详解python持久化文件读写
Apr 06 Python
使用python实现画AR模型时序图
Nov 20 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
python 连续不等式语法糖实例
Apr 15 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
Python天气语音播报小助手
Sep 25 Python
Python实现自动玩连连看的脚本分享
Apr 04 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
php adodb分页实现代码
2009/03/19 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
js控制框架刷新
2008/08/01 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
React diff算法的实现示例
2018/04/20 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
Python求算数平方根和约数的方法汇总
2016/03/09 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
打印机墨盒:123Inkjets
2017/02/16 全球购物
致1500米运动员广播稿
2014/02/07 职场文书
岗位明星事迹材料
2014/05/18 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
管辖权异议上诉状
2015/05/23 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
自信主题班会
2015/08/14 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书