मुझे गैर मानक% uxxxx योजना के बारे में पता है लेकिन यह एक बुद्धिमान विकल्प की तरह प्रतीत नहीं होता है क्योंकि योजना डब्ल्यू 3 सी द्वारा खारिज कर दी गई है।यूनिकोड वर्णों को एन्कोड करने का उचित तरीका क्या है?
कुछ रोचक उदाहरण:
हृदय चरित्र। अगर मैं अपने ब्राउज़र में इस टाइप करें:
http://www.google.com/search?q=♥
फिर कॉपी और पेस्ट करें, मैं इस URL
http://www.google.com/search?q=%E2%99%A5
यह फ़ायरफ़ॉक्स (या सफारी) की तरह लग इस कर रही है बनाता है जो देखते हैं।
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
जो समझ में आता है, चीजें हैं जो लैटिन -1 में इनकोडिंग नहीं किया जा सकता, ट्रिपल डॉट चरित्र की तरह के अलावा
।
…
अगर मैं यूआरएल
http://www.google.com/search?q=…
अपने ब्राउज़र में
तो कॉपी और पेस्ट टाइप करें, मैं
http://www.google.com/search?q=%E2%80%A6
वापस मिलता है। ऐसा लगता है कि
urllib.quote_plus(x.encode("utf-8"))
जो समझ में आता है ... लैटिन -1 के साथ एन्कोड नहीं किया जा सकता है।
लेकिन तब मेरे लिए अपनी स्पष्ट नहीं कैसे ब्राउज़र जानता है UTF-8 या लैटिन -1 के साथ डिकोड करने के लिए है या नहीं।
इस के बाद से अस्पष्ट प्रतीत हो रहा है:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
काम करता है, इसलिए मैं नहीं जानता कि कैसे ब्राउज़र है कि क्या पता लगा लेता डिकोड करने के लिए है कि UTF-8 या लैटिन -1 के साथ।
उन विशेष पात्रों के साथ क्या करने की ज़रूरत है, जिनसे मुझे निपटने की ज़रूरत है?
आपके दोनों उदाहरण यूटीएफ -8 के रूप में एन्कोड किए गए हैं। पहला निश्चित रूप से लैटिन -1 नहीं है, यह देखते हुए कि यह तीन बाइट लंबा है ... –
% ई 2% 99% ए 5 यूटीएफ -8 में "ब्लैक हार्ट सूट" के बाइट मूल्यों के लिए हेक्स है (http: // www। ltg.ed.ac.uk/~richard/utf-8.cgi?input=E2+99+A5&mode=bytes)। वह काला दिल [लैटिन -1 चरित्र सेट] (http://en.wikipedia.org/wiki/ISO/IEC_8859-1) का हिस्सा नहीं है। –
विश्वसनीय रूप से देखने के लिए कि ब्राउज़र कितना और क्या एन्कोडिंग (और कई अन्य उपयोगी जानकारी) है, अधिकांश आधुनिक ब्राउज़रों में बनाए गए डेवलपर टूल का उपयोग करें, या एक मुफ्त HTTP डीबगर जैसे [फिडलर] प्राप्त करें (http: //www.telerik .com/Fiddler)। –