urllib が有効な % エンコードされた文字列のみを引用解除できるようにする方法は?
html_parser = HTMLParser.HTMLParser()
url = 'Time-@#*%ed%20&'
print urllib2.unquote(url)
print html_parser.unescape(url)
結果は
Time-@#*� &
Time-@#*%ed%20&
urllib は '%20' を ' ' に引用解除しますが、'%ed' を '�' に引用解除するのも間違っています
HTMLParser は「&」をエスケープできます '&' に変換できますが、'%20' を ' ' に変換できません
- - - - - - - 編集 - - -
私の質問をうまく説明できなかったことをお詫びします。実際、処理する文字列がたくさんあります。URL もそうでないものもあります。元の文字列は ですが、両方の状況を含むようにTime-@#*%ed
文字列を にしました。Time-@#*%ed%20&
1 行のコードで両方の状況を処理するのは難しいことがわかりました。答えを読んだ後、私は自分の関数を書きます
#!/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 = 'Time-@#*%ed%20&'
print urllib.unquote(url)
print html_parser.unescape(url)
print unquote_string(url)