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获取当前计算机cpu数量的方法
Apr 18 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
Python并发concurrent.futures和asyncio实例
May 04 Python
Python调用C/C++的方法解析
Aug 05 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
php短址转换实现方法
2015/02/25 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
区域销售经理职责
2013/12/22 职场文书
个人现实表现材料
2014/02/04 职场文书
小学生寒假家长评语
2014/04/16 职场文书
小学领导班子对照材料
2014/08/23 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
公司考勤管理制度
2015/08/04 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python