मैं बेस 64 में एक ट्विटर एम्बेड कोड को एन्कोड करने का प्रयास कर रहा हूं जिसमें एक या एकाधिक इमोजी हो सकते हैं या नहीं। तो जब स्ट्रिंग में इमोजी होता है, तो मुझे यह त्रुटि मिलती है: Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

क्या मैं ऐसा कुछ कर सकता हूं कि जब मैं अपनी स्ट्रिंग पर btoa() चलाता हूं, तो यह इमोजी सहित पूरी स्ट्रिंग को एन्कोड करता है, और जब मैं इसे PHP में base64_decode का उपयोग करके डीकोड करता हूं, तो इमोजी फिर से दिखाई देता है?

अग्रिम में धन्यवाद!

8
sadmansh 18 जून 2019, 14:08

2 जवाब

सबसे बढ़िया उत्तर

आप पहले इससे बचकर और फिर उस पर EncodeUriComponent को कॉल करके इसे एन्कोड कर सकते हैं।

यह इस तरह दिखता है:

btoa(unescape(encodeURIComponent('😂')));

ऊपर दिया गया इमोजी "8J+Ygg==" लौटाएगा

इसे डीकोड करने के लिए आप यह करेंगे

decodeURIComponent(escape(window.atob('8J+Ygg==')));

आप दो कार्य कर सकते हैं जो इसे थोड़ा आसान बनाते हैं:

//Encode
function utoa(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
}
//Decode
function atou(str) {
    return decodeURIComponent(escape(window.atob(str)));
}

स्रोत: https://developer.mozilla.org/en-US/ डॉक्स/वेब/एपीआई/विंडोऑरवर्करग्लोबलस्कोप/बीटीओए

3
David M 18 जून 2019, 14:22

जेएस-बेस 64 लाइब्रेरी का प्रयोग करें

var str = "I was funny 😂";
console.log("Original string:", str);

var encodedStr = Base64.encode(str)
console.log("Encoded string:", encodedStr);

var decodedStr = Base64.decode(encodedStr)
console.log("Decoded string:", decodedStr);
<script src="https://cdn.jsdelivr.net/npm/js-base64@2.5.2/base64.min.js"></script>
0
Shivaji Mutkule 18 मार्च 2020, 08:24