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获取DLL和EXE文件版本号的方法
Mar 10 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
wxPython修改文本框颜色过程解析
Feb 14 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
pytorch中的weight-initilzation用法
Jun 24 Python
python基于opencv实现人脸识别
Jan 04 Python
PyCharm2020.3.2安装超详细教程
Feb 08 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
php中文件上传的安全问题
2006/10/09 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP使用函数用法详解
2018/09/30 PHP
Jquery 弹出层插件实现代码
2009/10/24 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
浅谈django的render函数的参数问题
2018/10/16 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python中and和or如何使用
2020/05/28 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
Java servlet面试题
2012/03/04 面试题
医科大学生毕业的自我评价分享
2013/11/12 职场文书
党建工作汇报材料
2014/12/24 职场文书
期末考试复习计划
2015/01/19 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
学生病假条怎么写
2015/08/17 职场文书
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技