鄂破机看 发表于 2017-4-28 11:13:13

URL编码解析python

  解析编码的python脚本,我们经常看到从搜索引擎过来的referr带有很长的一串编码,如果能将其转化成我们可以看得懂的汉字呢,下面是一个小的脚本来完成这样的事情。感谢cocobear的提供。

import urllib
import sys,getopt,re
__doc__ = """Usage:
./url2read.py -h
./url2read.py -r ftp://cocobear.info/中国
./url2read.py http://cocobear.info/%E4%B8%AD%E5%9B%BD
"""

def url2read(s):
s = urllib.unquote(s)
try:
s = s.decode('utf-8')
except UnicodeDecodeError:
s = s.decode('gbk')
finally:
print s.encode(sys.stdin.encoding)

def read2url(s):
head = ''
g = re.search('^(http|ftp://)(.*)',s)
if g:
head = g.group(1)
s = g.group(2)
gbk = urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
utf8 = urllib.quote(s.decode(sys.stdin.encoding).encode('utf-8'))
if gbk == utf8:
print head+gbk
return 0
else:
print "UTF8:\n"+head+utf8
print "GBK:\n"+head+gbk
return 0
def main(argv=None):
f = False
if len(sys.argv) < 2:
print __doc__
return 1
try:
opts,args = getopt.getopt(sys.argv,"h,r",["help","reverse"])
except getopt.error,msg:
print msg
print __doc__
return 1
for o,a in opts:
if o in ("-h","--help"):
print __doc__
return 0
if o in ("-r","--reverse"):
f = True
for arg in args:
if f:
return read2url(arg)
else:
return url2read(arg)

if __name__ == "__main__":
sys.exit(main())


  做个示例,使用该程序在命令行下获取“\”的URL
编码:

$ ./url2read.py -r ""'\'""

GBK:

%5C

UTF8:

%5C
  注意这里由于存在shell的解释,需要这样把“\”围起来。
  这个脚本可以很好的在Linux与Windows下使用,贴代码:
页: [1]
查看完整版本: URL编码解析python