2012-12-08 12 views
5

जावास्क्रिप्ट में मैं निम्न कार्य करें:पायथन यूआरएल डिकोडिंग?

encodeURIComponent(comments) 

जबकि अजगर में मैं निम्न कार्य करें:

urllib2.unquote(comments) 

किसी कारण के लिए, जब मैं निम्न करें:

encodedURIComponents('ø') 

मैं %C3%B8, लेकिन जब मैं

urllib2.unquote('%C3%B8') 
01 डीकोड करता हूं

मुझे के बजाय ø मिलता है, जो मूल वर्ण है।

क्या देता है?

मैं एक मंच पर हूं जो क्लाइंट साइड पर jQuery का उपयोग करता है, और पायथन/Django सर्वर पक्ष।

+0

कारण आप इस को देख रहे हैं जो एक ओर तो UTF-8 उपयोग कर रहा है, अन्य लैटिन -1 उपयोग कर रहा है। यही कारण है कि आपको कभी भी डिफ़ॉल्ट एन्कोडिंग का उपयोग नहीं करना चाहिए और अपनी उंगलियों को पार करना चाहिए; यदि आपके पास कोई गैर-ASCII वर्ण हैं, तो उन्हें आंतरिक रूप से 'यूनिकोड' तारों में रखें, और प्रत्येक सीमा पर तारों को एन्कोड और डीकोड करें। (जब आप इसे गलत पाते हैं तो पाइथन 3 आपको मोजिबैक की बजाय त्रुटि देता है।) – abarnert

+0

क्लाइंट साइड प्रकारों पर प्रपत्र, मैं यूटीएफ -8 मान रहा हूं, जबकि पायथन/डीजेंगो यूनिकोड का उपयोग करता है? मैं पाइथन 2.x पर हूँ। – user1886965

+0

वेब फ़ॉर्मों में प्रत्येक दिशा में (HTTP शीर्षलेख, या प्रतिक्रिया निकाय में) वर्णमाला निर्दिष्ट करने का तरीका है, और लैटिन -1 के लिए डिफ़ॉल्ट है। पायथन 2 में 'str' और' यूनिकोड 'के बीच एन्कोड और डिकोड करने का एक तरीका है, और यदि आप केवल' str 'का उपयोग करते हैं तो आप बाइट्स से निपट रहे हैं जिसका अर्थ अनिर्दिष्ट है। (देखें कि sys.getdefaultencoding() 'रिटर्न क्या है।) तो अक्षर का उपयोग करते हुए वर्णमाला प्राप्त करें, और स्ट्रिंग को यूनिकोड में काम करने के लिए डीकोड करें; जब इसे वापस भेजते हैं, तो यूटीएफ -8 को एन्कोड करें और अक्षरसेट सेट करें (या, बेहतर, Django को इसकी देखभाल करने दें, यदि ब्राउज़र किसी कारण से 'स्वीकार्य-वर्णसेट' भेजता है)। – abarnert

उत्तर

7

सीधे शब्दों में यह डिकोड करने के लिए प्रयास करें:

urllib2.unquote('%C3%B8').decode('utf-8') # --> 'ø' 
+1

नोट: यह वास्तव में है ['urllib.unquote()'] (http://docs.python.org/2/library/urllib#urllib.unquote) – jfs

+0

यदि मैं ऐसा करता हूं, तो मुझे 'u' \ xf8 ' '...? – user1886965

+0

@ user1886965: 'u '\ xf8'' सटीक समान स्ट्रिंग है जो' यूओ 'है, क्योंकि' ø' 248 वें यूनिकोड वर्ण है। – abarnert

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