如何讓urllib只引用有效的%編碼字符串?python urllib無法引用損壞
html_parser = HTMLParser.HTMLParser()
url = '[email protected]#*%ed%20&'
print urllib2.unquote(url)
print html_parser.unescape(url)
結果是
[email protected]#*� &
[email protected]#*%ed%20&
的urllib引文結束 '%20' '',但它也錯引文結束 '%ED' 到 ''
的HTMLParser能逃脫「&安培; 「爲 '&',但它不能將 '%20' ''
--------------編輯------
我道歉不能很好地解釋我的問題,實際上我有很多字符串需要處理,有些是URL,有些則不是。原始字符串是[email protected]#*%ed
,我將字符串設爲[email protected]#*%ed%20&
以包含這兩種情況。事實證明,很難在一行代碼中處理這兩種情況。閱讀的答案後,我寫我自己的函數
#!/bin/env python
#coding: utf8
import sys
import os
import HTMLParser
import re
import urllib
html_parser = HTMLParser.HTMLParser()
url_pattern = re.compile('^(ftp|http|https)://.{4,}', flags=re.I)
def unquote_string(url):
if url_pattern.search(url):
while True:
url1 = urllib.unquote(url)
if url1 == url: break
url = url1
else:
while True:
url1 = html_parser.unescape(url)
if url1 == url: break
url = url1
return url
url = '[email protected]#*%ed%20&'
print urllib.unquote(url)
print html_parser.unescape(url)
print unquote_string(url)
看起來我混淆了'%'和'&':-(。Post updated –