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中规范定义命名空间的一些建议
Jun 04 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
Python中max函数用于二维列表的实例
Apr 03 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
Python中字符串与编码示例代码
May 20 Python
Django Celery异步任务队列的实现
Jul 24 Python
Django如何实现上传图片功能
Aug 16 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
Django怎么在admin后台注册数据库表
Nov 14 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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
python实现12306火车票查询器
2017/04/20 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
预备党员思想汇报范文
2013/12/29 职场文书
期末自我鉴定
2014/01/23 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
优乐美广告词
2014/03/14 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
校长个人总结
2015/03/03 职场文书
中学生运动会广播稿
2015/08/19 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android