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选择排序算法的实现代码
Nov 21 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python中的集合类型知识讲解
Aug 19 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
python事件驱动event实现详解
Nov 21 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
python 回溯法模板详解
Feb 26 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
推荐dojo学习笔记
2007/03/24 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
详解参数传递四种形式
2015/07/21 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
React Router基础使用
2017/01/17 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
vue脚手架中配置Sass的方法
2018/01/04 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
python中的yield使用方法
2014/02/11 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
Exception类的常用方法
2012/06/16 面试题
营销主管自我评价怎么写
2013/09/19 职场文书
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
学校运动会报道稿
2014/09/23 职场文书
焦裕禄观后感
2015/06/03 职场文书
昆虫记读书笔记
2015/06/26 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
在redisCluster中模糊获取key方式
2021/07/09 Redis
Python 阶乘详解
2021/10/05 Python
Python制作表白爱心合集
2022/01/22 Python