पाइथन में UTF-8 को उरेल डीकोड करें


245

जहाँ तक मैं पायथन में नौसिखिया हूँ, मैंने बहुत समय बिताया है।
मैं ऐसे URL को कभी भी कैसे डीकोड कर सकता हूं:

example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0

अजगर 2.7 में यह एक के लिए: example.com?title==правовая+защита

url=urllib.unquote(url.encode("utf8")) बहुत बदसूरत कुछ लौट रहा है।

फिर भी कोई हल नहीं, किसी भी मदद की सराहना की है।


2
सामान्य स्थिति में, एक यूआरएल की पूंछ सिर्फ एक कुकी है। आप यह नहीं जान सकते कि कौन सा स्थानीय कैरेक्टर-सेट एन्कोडिंग सर्वर का उपयोग करता है या यहां तक ​​कि चाहे URL एक स्ट्रिंग को एन्कोड करता हो या कुछ पूरी तरह से अलग हो। (दी, कई यूआरएल करना , और अक्सर, आप एन्कोडिंग बहुत आसानी से अनुमान लगा सकते हैं लेकिन यह आम तौर पर इस मामले में या पूरी तरह से स्वचालित रूप से संभव नहीं है एनकोड एक मानव पठनीय स्ट्रिंग।।)
tripleee

जवाबों:


398

डेटा UTF-8 एन्कोडेड बाइट्स URL के साथ बच गया है, इसलिए आप डिकोड करना चाहते हैं urllib.parse.unquote(), जिसके साथ प्रतिशत-एन्कोडेड डेटा से UTF-8 बाइट्स तक डिकोडिंग और फिर टेक्स्ट में, पारदर्शी रूप से:

from urllib.parse import unquote

url = unquote(url)

डेमो:

>>> from urllib.parse import unquote
>>> url = 'example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0'
>>> unquote(url)
'example.com?title=правовая+защита'

पायथन 2 समतुल्य है urllib.unquote(), लेकिन यह एक बाइटस्ट्रिंग देता है, इसलिए आपको मैन्युअल रूप से डीकोड करना होगा:

from urllib import unquote

url = unquote(url).decode('utf8')

तो स्ट्रिंग में + वर्ण क्यों छोड़ा गया है? मुझे लगा कि% 2 बी + चरित्र था और डिकोडिंग के दौरान + शाब्दिक हटा दिए गए थे?
एलेक्सलॉर्ड टॉर्सन

5
@Rawrgulmuffins डेटा+ में एक स्थान है ; आप उसे पार्स या उपयोग करने के लिए उपयोग करेंगे । लेकिन उन्हें केवल क्वेरी स्ट्रिंग में दिखाई देना चाहिए, बाकी URL में नहीं। x-www-form-urlencodedurllib.parse.parse_qs()urllib.parse.unquote_plus()
मार्टिन पीटर्स

140

यदि आप पायथन 3 का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं urllib.parse

url = """example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0"""

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

देता है:

'example.com?title=правовая+защита'

इस का उपयोग करते हुए और python3.8 पर क्वेरी स्ट्रिंग के बजाय एक dict हो रही
Clocker
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.