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实现批量下载文件
May 17 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
Python生成器以及应用实例解析
Feb 08 Python
python验证码识别教程之滑动验证码
Jun 04 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
pandas参数设置的实用小技巧
Aug 23 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 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
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
关于页面优化和伪静态
2009/10/11 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
简单理解Python中的装饰器
2015/07/31 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
介绍一下RMI的基本概念
2016/12/17 面试题
公务员年总结的自我评价
2013/10/25 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
yy生日主持词
2014/03/20 职场文书
宿舍标语大全
2014/06/19 职场文书
观看信仰心得体会
2014/09/04 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
个人简历求职信范文
2015/03/20 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS