Decode URL में वर्णों से बच गया


83

मेरे पास एक सूची है जिसमें URL बच गए हैं और उनमें पात्र हैं। उन अक्षरों को 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 

क्या उन्हें अजगर में उनके अपरूपित रूप में वापस बदलने का एक तरीका है?

PS: URL को utf-8 में एन्कोड किया गया है

जवाबों:


144

आधिकारिक डॉक्स।

urllib.unquote(तार)

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

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

और फिर सिर्फ डिकोड करें।


अद्यतन: पायथन 3 के लिए, निम्नलिखित लिखें:

import urllib.parse
urllib.parse.unquote(url)

पायथन 3 डॉक्स।


जैसा कि मैंने ऊपर कहा था unquote से पता चलता है। url एक चीनी है और मैं इसे मूल चर के लिए डिकोड करना चाहता हूं, न कि एक को रेखांकित करना
टोनी

3
@dyoser आपको इसे अपने प्रश्न में रखना होगा।
क्रिश हार्पर

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

11
बस ध्यान दें कि python3 के लिए, यह हैurllib.parse.unquote
tayfun

4
Python3 के लिए यह भी हैurllib.request.unquote
बेन


11

या 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)'

7

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


जब मैं unquote (वैसे धन्यवाद ...) का उपयोग करता हूं, तो यह यह स्ट्रिंग नमूना दिखाता है ।index.php?title= \ xe9 \ xa6 \ x96 \ xe9 \ xa1 \ xb5 & action = =i और मुझे पता है कि वे चीनी वर्ण हैं ... मैं उन्हें कैसे देख सकता हूँ? मुझे लगता है कि यह यूनिकोड है, है ना?
टोनी

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

5
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)

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

6
शांत समाधान! urllib2मानक अजगर डिस्ट्रीरी का हिस्सा नहीं है। reहै।
cxxl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.