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 相关文章推荐
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
python实现下载整个ftp目录的方法
Jan 17 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
解决python Markdown模块乱码的问题
Feb 14 Python
Golang GBK转UTF-8的例子
Aug 26 Python
python实现小世界网络生成
Nov 21 Python
python中如何使用insert函数
Jan 09 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python编写俄罗斯方块
Mar 13 Python
通过cmd进入python的步骤
Jun 16 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 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脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
Vue header组件开发详解
2018/01/26 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
python 实现识别图片上的数字
2019/07/30 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
python中altair可视化库实例用法
2021/01/26 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
大学生个人自我鉴定
2013/12/03 职场文书
比赛口号大全
2014/06/10 职场文书
琅琊山导游词
2015/02/05 职场文书
小学运动会入场词
2015/07/18 职场文书
决心书格式及范文
2019/06/24 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书