असल में, सबकुछ आम तौर पर आंतरिक रूप से किसी प्रकार के यूनिकोड के रूप में संग्रहीत होता है, लेकिन इसमें शामिल नहीं होने देता है। मुझे लगता है कि आपको प्रतिष्ठित "à ¥ ÃÆ'à ¢ एक प्रकार का तार मिल रहा है क्योंकि आप अपने चरित्र एन्कोडिंग के रूप में एक आईएसओ -885 9 का उपयोग कर रहे हैं। एक चाल है जो आप उन पात्रों को बदलने के लिए कर सकते हैं। escape
और unescape
एन्कोडिंग और डिकोडिंग क्वेरी स्ट्रिंग के लिए प्रयुक्त फ़ंक्शंस को आईएसओ वर्णों के लिए परिभाषित किया गया है जबकि नए encodeURIComponent
और decodeURIComponent
जो एक ही काम करते हैं, को यूटीएफ 8 अक्षरों के लिए परिभाषित किया गया है।
escape
encodes विस्तारित ISO-8859-1 वर्ण (UTF कोड अंक U + 0080-U + 00ff) %xx
(दो अंकों हेक्स) जबकि वह कूटबद्ध रूप में UTF कोड पॉइंट्स U + 0100 और इसके बाद के संस्करण के रूप में %uxxxx
(%u
चार के बाद -डिजिट हेक्स।) उदाहरण के लिए, escape("å") == "%E5"
और escape("あ") == "%u3042"
।
encodeURIComponent
प्रतिशत-एन्कोड विस्तारित वर्णों को यूटीएफ 8 बाइट अनुक्रम के रूप में विस्तारित करता है। उदाहरण के लिए, encodeURIComponent("å") == "%C3%A5"
और encodeURIComponent("あ") == "%E3%81%82"
।
तो तुम कर सकते हैं:
fixedstring = decodeURIComponent(escape(utfstring));
उदाहरण के लिए, एक गलत तरीके से एन्कोड चरित्र 'ए' बन जाता है "एक ¥"। आदेश escape("Ã¥") == "%C3%A5"
करता है जो एकल बाइट्स के रूप में एन्कोड किए गए दो गलत आईएसओ वर्ण हैं। फिर decodeURIComponent("%C3%A5") == "å"
, जहां दो प्रतिशत-एन्कोडेड बाइट्स को यूटीएफ 8 अनुक्रम के रूप में व्याख्या किया जा रहा है।
आप किसी कारण के लिए रिवर्स, वह भी काम करता है क्या करने की जरूरत हैं, तो:
utfstring = unescape(encodeURIComponent(originalstring));
वहाँ बुरा UTF8 तार और तार और आईएसओ के बीच अंतर करने के लिए एक रास्ता है? बाहर निकलता है। उपरोक्त प्रयुक्त डीकोडुरिकोम्पोनेंट फ़ंक्शन एक विकृत एन्कोडेड अनुक्रम दिए जाने पर एक त्रुटि फेंक देगा। हम इसकी एक बड़ी संभावना के साथ पता लगाने के लिए इसका उपयोग कर सकते हैं कि हमारी स्ट्रिंग यूटीएफ 8 या आईएसओ है या नहीं।
var fixedstring;
try{
// If the string is UTF-8, this will work and not throw an error.
fixedstring=decodeURIComponent(escape(badstring));
}catch(e){
// If it isn't, an error will be thrown, and we can asume that we have an ISO string.
fixedstring=badstring;
}
मैंने आपके उत्तर के उत्तर पर आपके उत्तर का संदर्भ दिया है यहां प्रश्न: http://stackoverflow.com/questions/18847191/is-there-a-uniform-method-in-both-php-and-js-to-convert-unicode-characters/18863966#18863966 – hsuk
@nitro : क्या जावास्क्रिप्ट आईएसओ लैटिन के रूप में प्रत्येक यूटीएफ -8 वर्णों को मानता है? – hsuk
'एस्केप' एन्कोड्स आईएसओ -885 9 -1 अक्षरों (यूटीएफ कोड पॉइंट्स यू +0080-यू +00 एफएफ) को '% xx' (दो अंकों वाला हेक्स) के रूप में विस्तारित करते हैं जबकि यह यूटीएफ कोडपॉइंट्स यू +0100 और ऊपर'% uxxxx' के रूप में एन्कोड करता है ('% u' के बाद चार अंकों वाला हेक्स।) उदाहरण के लिए, 'बचें (" å ") =="% E5 "' और' escape ("あ") == "% u3042" '। 'encodeURIComponent' प्रतिशत-एन्कोड विस्तारित वर्णों को यूटीएफ 8 बाइट अनुक्रम के रूप में। उदाहरण के लिए, 'encodeURIComponent (" å ") =="% C3% A5 "' और 'encodeURIComponent (" あ ") =="% E3% 81% 82 "'। मुझे आशा है कि किसी भी प्रश्न को साफ़ कर देगा। – nitro2k01