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批量生成任意尺寸的图片
Aug 29 Python
Python 多进程和数据传递的理解
Oct 09 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
Jul 04 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
Django重置migrations文件的方法步骤
May 01 Python
python:动态路由的Flask程序代码
Nov 22 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
python访问hdfs的操作
Jun 06 Python
Python实现Word文档转换Markdown的示例
Dec 22 Python
python中__slots__节约内存的具体做法
Jul 04 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
phpmail类发送邮件函数代码
2012/02/20 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
jQuery学习基础知识小结
2010/11/25 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python Opencv将图片转为字符画
2021/02/19 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python 实现一个简单的web服务器
2021/01/03 Python
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
final, finally, finalize的区别
2012/03/01 面试题
党员批评与自我批评范文
2014/09/23 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers