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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
Python json模块dumps、loads操作示例
Sep 06 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
python 自动识别并连接串口的实现
Jan 19 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
BBS(php & mysql)完整版(六)
2006/10/09 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
python中global用法实例分析
2015/04/30 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
python3.4实现邮件发送功能
2018/05/28 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
Pytorch之finetune使用详解
2020/01/18 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Keras实现DenseNet结构操作
2020/07/06 Python
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
会计自我鉴定
2013/11/02 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
一行Python命令实现批量加水印
2022/04/07 Python