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爬取csdn博客访问量
Feb 14 Python
Python 递归函数详解及实例
Dec 27 Python
python3使用scrapy生成csv文件代码示例
Dec 28 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
python队列Queue的详解
May 10 Python
我们为什么要减少Python中循环的使用
Jul 10 Python
Django model update的多种用法介绍
Mar 28 Python
简单的Python调度器Schedule详解
Aug 30 Python
python中删除某个元素的方法解析
Nov 05 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
常用的10个Python实用小技巧
Aug 10 Python
在 Python 中使用 7zip 备份文件的操作
Dec 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的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
索趣科技的答案
2007/02/07 Javascript
Javascript 布尔型分析
2008/12/22 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
Python实现大文件排序的方法
2015/07/10 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
远东集团网络工程师面试题
2014/10/20 面试题
毕业自我评价
2014/02/05 职场文书
企业指导教师评语
2014/04/28 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
教师学期个人总结
2015/02/11 职场文书
学习计划是什么
2019/04/30 职场文书