python用于url解码和中文解析的小脚本(python url decoder)_python

复制代码 代码如下:

# -*- 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吧,所以後者的解碼你那邊失敗了。猜編碼是很累的事情,如果大家都用utf8倒也好,但是有些人習慣了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')

时间: 2024-10-21 17:22:17

python用于url解码和中文解析的小脚本(python url decoder)_python的相关文章

用于打包和删除历史文件的小脚本

需求大概是:将特定目录内的文件打包,并删除七天以前的文件. 常用于文件备份. 以下是我写的一个小脚本,拿出来晒晒.. #!/bin/bash #By 小崔 #QQ:295749093 for server_d in `ls /data/|grep '^server_[0-9]\{1,3\}$'` do if [ -d "/data/$server_d/lszm/server/game_server/backup" ] then for server_f in `ls /data/$se

python通过urllib2获取带有中文参数url内容的方法_python

本文实例讲述了python通过urllib2获取带有中文参数url内容的方法.分享给大家供大家参考.具体如下: 对于中文的参数如果不进行编码的话,python的urllib2直接处理会报错,我们可以先将中文转换成utf-8编码,然后使用urllib2.quote方法对参数进行url编码后传递. content = u'你好 jb51.net' content = content.encode('utf-8') content = urllib2.quote(content) api_url =

jquery.ajax的url中传递中文乱码问题的解决方法

 本篇文章主要是对jquery.ajax的url中传递中文乱码问题的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 JQuery   JQuery默认的contentType:application/x-www-form-urlencoded    这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1    ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符.   JQuery的Ajax根本没有考

服务器-URL传参中文乱码,new string("iso-8859-1","utf-8")方法不行

问题描述 URL传参中文乱码,new string("iso-8859-1","utf-8")方法不行 小白接触后台不多,用myecplise开了一个服务器(tomcat),其中有url参数:http://xxx(ip)/downloadservlet?name=小儿鼻出血.mp4 ,然后出现乱码,服务器无法定位到该文件. 查网发现大部分对name进行转码,用name= new string("iso-8859-1","utf-8&qu

cordova 发起的请求,用于登录,当密码中存在特殊字符时,URL会被截断,.net端接收不全

问题描述 cordova 发起的请求,用于登录,当密码中存在特殊字符时,URL会被截断,.net端接收不全 $.ajax({ type: "get", url: "http://192.168.0.1:80/AppService.asmx/Login", data: "{UserID: '123',Password:'123456*#' }", dataType: "json", success: function(data)

httpwebrequest-HttpWebResponse ResponseUri 跳转的URL中存在中文就乱码

问题描述 HttpWebResponse ResponseUri 跳转的URL中存在中文就乱码 C# 代码 string MyLink = "http://www.zei8.net/plus/download.php?open=2&id=55507&uhash=dc74d5c3ccbb8856f2e13515": HttpWebRequest "request = (HttpWebRequest)WebRequest.Create(MyLink); rettp

GET方法URL中传递中文参数乱码的解决方法_JSP编程

1.在页面中对你的URL进行编码 使用------encodeURI(你要使用的中文参数值)如:...?username"+encodeURI("小甜甜") 2.在后台通过解码来接收该中文参数 使用----String name = new String(request.getParameter("username ").getBytes("iso8859-1"),"utf-8") 3.最好不要在URL中传递中文参数

Python读写Json涉及到中文的处理方法_python

今天在帮前端准备数据的时候,需要把数据格式转成json格式,说实话,涉及到中文有时候真的是很蛋疼,除非对Python的编码规则比较了解,不然处理起来真的很蛋疼. 整个逻辑 我们需要处理的是把一些文章处理,生成多个html文件,然后用json来显示文章的列表,图片,摘要和标题. 思路 为了以后的数据扩展,那必须有一个数据库,我的想法就是自己写一个简单的网页做为提交输入,然后post到后台以后录入到数据库中,再写一个展示文章的页面,展示效果正确后,写一个requests动态的把所有的数据都爬下来生成

Python base64编码解码实例

  这篇文章主要介绍了Python base64编码解码实例,本文直接给出实例代码,使用也很简单,需要的朋友可以参考下 Python中进行Base64编码和解码要用base64模块,代码示例: ? 1 2 3 4 5 6 7 #-*- coding: utf-8 -*- import base64   str = 'cnblogs' str64 = base64.b64encode(str) print str64 #Y25ibG9ncw== print base64.b64decode(str