2011-11-15 12 views
44

में वर्णों से बच निकले मेरे पास एक सूची है जिसमें उनसे बच निकले वर्णों वाले यूआरएल हैं। उन अक्षरों urllib2.urlopen द्वारा निर्धारित किया गया है, जब यह html पृष्ठ ठीक हैडीकोड यूआरएल

http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=edit 
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=history 
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&variant=zh 

वहाँ अजगर में उनके नहीं छोड़ा जाएगा फार्म के लिए उन्हें वापस बदलने के लिए कोई तरीका है?

पी.एस .: यूआरएल utf-8

उत्तर

82

Official docs.

urllib.unquote(में इनकोड स्ट्रिंग)

उनके एकल चरित्र समकक्ष द्वारा %xx पलायन बदलें।

उदाहरण: unquote('/%7Econnolly/')'/~connolly/' पैदा करता है।

और फिर बस डीकोड करें।


अद्यतन: अजगर 3 के लिए, निम्न लिखें:

urllib.parse.unquote(url) 

Python 3 docs.

+0

गंदें शब्द बोलना शो के रूप में मैं sample.com/index.php?title=\xe9\xa6\x96\xe9\xa1 ऊपर कहा \ xb5 और action = edi ... शायद मैंने इस मामले में खुद को बहुत अच्छी तरह से समझाया नहीं है ... लेकिन यूआरएल एक चीनी है और मैं इसके मूल चार को डीकोड करना चाहता हूं, न कि एक निर्विवाद एक – dyoser

+3

@dyoser आपको इसे रखना होगा आपके प्रश्न में –

+0

@ root45 यह एक उत्तर के लिए एक टिप्पणी है ... तो यह ठीक है यहाँ अच्छा है। सराहना करने के लिए धन्यवाद। – dyoser

6

आप उपयोग कर सकते हैं urllib.unquote

+0

में भी है जब मैं अनकॉइट (जिस तरह से धन्यवाद ...) का उपयोग करता हूं, यह यह स्ट्रिंग http: //sample.com/index.php? Title = \ xe9 \ xa6 \ x96 \ xe9 \ xa1 \ xb5 और action = edi और मुझे पता है कि वे चीनी वर्ण हैं ... मैं उन्हें कैसे देख सकता हूं? मुझे लगता है कि यह यूनिकोड है, है ना? – dyoser

+0

यह आपके प्रश्न में पहले से ही है। वे यूटीएफ -8 बाइट हैं; आप उन्हें 'बी "\ xe9 \ xa6 \ x96 \ xe9 \ xa1 \ xb5" .decode ("utf-8") के साथ यूनिकोड स्ट्रिंग में परिवर्तित कर सकते हैं (अब कुछ और आधुनिक पायथन वाक्यविन्यास का उपयोग कर)। – tripleee

3
import re 

def unquote(url): 
    return re.compile('%([0-9a-fA-F]{2})',re.M).sub(lambda m: chr(int(m.group(1),16)), url) 
+7

लाइब्रेरी में निर्मित होने पर मैन्युअल रूप से रीगेक्स और लैम्ब्डा का उपयोग क्यों करेंगे, जो आपको चाहिए, शायद और भी विचारपूर्वक? –

+4

कूल समाधान! 'urllib2' मानक पायथन distri का हिस्सा नहीं है। 'पुनः' है। – cxxl

9

या urllib.unquote_plus

>>> import urllib 
>>> urllib.unquote('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29') 
'erythrocyte+membrane+protein+1,+PfEMP1+(VAR)' 
>>> urllib.unquote_plus('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29') 
'erythrocyte membrane protein 1, PfEMP1 (VAR)' 
18

और अगर आप Python3 उपयोग कर रहे हैं आप इस्तेमाल कर सकते हैं:

urllib.parse.unquote(url) 
+0

'urllib.request.unquote' में भी – Ben

संबंधित मुद्दे