最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 14:29:46
文档

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

python用于url解码和中文解析的小脚本(pythonurldecoder): 代码如下: # -*- coding: utf8 -*- #! python print(repr(测试报警,xxxx是大猪头.decode(UTF8).encode(GBK)).replace(\\x,%)) 注意第一个 decode(UTF8) 要与文件声明的编码一样。 最开始对这个问题的接触,来自于一个Ja
推荐度:
导读python用于url解码和中文解析的小脚本(pythonurldecoder): 代码如下: # -*- coding: utf8 -*- #! python print(repr(测试报警,xxxx是大猪头.decode(UTF8).encode(GBK)).replace(\\x,%)) 注意第一个 decode(UTF8) 要与文件声明的编码一样。 最开始对这个问题的接触,来自于一个Ja

代码如下:


# -*- 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')

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

python用于url解码和中文解析的小脚本(pythonurldecoder): 代码如下: # -*- coding: utf8 -*- #! python print(repr(测试报警,xxxx是大猪头.decode(UTF8).encode(GBK)).replace(\\x,%)) 注意第一个 decode(UTF8) 要与文件声明的编码一样。 最开始对这个问题的接触,来自于一个Ja
推荐度:
标签: 编码 python url
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top