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 的内置字符串方法小结
Mar 15 Python
Python_LDA实现方法详解
Oct 25 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 Python
Python基于traceback模块获取异常信息
Jul 23 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
Python函数对象与闭包函数
Apr 13 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
php中的时间显示
2007/01/18 PHP
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php数组合并的二种方法
2014/03/21 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
给ECShop添加最新评论
2015/01/07 PHP
PHP6新特性分析
2016/03/03 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Python科学画图代码分享
2017/11/29 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
浅谈Python type的使用
2019/11/19 Python
python 并发下载器实现方法示例
2019/11/22 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
业务员薪酬管理制度
2014/01/15 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
历史学专业求职信
2014/06/19 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS
正则表达式基础与常用验证表达式
2022/06/16 Javascript
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL