আপনি জাভাস্ক্রিপ্টে বেস 64 এ স্ট্রিংটি কীভাবে এনকোড করতে পারেন?


809

আমার একটি পিএইচপি স্ক্রিপ্ট রয়েছে যা একটি পিএনজি চিত্রটি বেস 64 স্ট্রিংয়ে এনকোড করতে পারে।

আমি জাভাস্ক্রিপ্ট ব্যবহার করে একই জিনিস করতে চাই। ফাইলগুলি কীভাবে খুলতে হয় তা আমি জানি তবে এনকোডিং কীভাবে করবেন তা নিশ্চিত not আমি বাইনারি ডেটা নিয়ে কাজ করতে অভ্যস্ত নই।


2
এখানে জাভাস্ক্রিপ্ট ব্যবহার করে বেস 64 এবং এনকোড এবং বেস 64-ডেকোডের সেরা উপায়। নীচের লিঙ্কগুলি দেখুন। phpjs.org/funitions/base64_encode:358 phpjs.org/funitions/base64_decode:357
গৌতমলাকুম

বেস 64 এনকোড / ডিকোডের জন্য এখানে আরেকটি jquery প্লাগইন রয়েছে
zahid9i

মাইক্রোজেস যাচাই করুন: মাইক্রোজেস.
বিনোদ শ্রীবাস্তব

উত্তর:


865

আপনি ব্যবহার করতে পারেন btoa()এবং atob()প্রয়োজন এবং করুন Base64- এনকোডিং থেকে রূপান্তর করবে।

এই ফাংশনগুলি কীভাবে গ্রহণ / প্রত্যাবর্তন করে সে সম্পর্কে মন্তব্যগুলিতে কিছু বিভ্রান্তি দেখা দেয়, তাই…

  • btoa()একটি "স্ট্রিং" গ্রহণ করে যেখানে প্রতিটি অক্ষর একটি 8-বিট বাইট উপস্থাপন করে - আপনি যদি 8 টি বিটগুলিতে প্রতিনিধিত্ব করা যায় না এমন অক্ষরযুক্ত স্ট্রিংটি পাস করেন তবে এটি সম্ভবত ভেঙে যাবে । আপনি যদি স্ট্রিংটিকে বাইট অ্যারে হিসাবে আচরণ করছেন তবে এটি কোনও সমস্যা নয় তবে আপনি যদি অন্য কিছু করার চেষ্টা করছেন তবে আপনাকে প্রথমে এটি এনকোড করতে হবে।

  • atob() একটি "স্ট্রিং" প্রদান করে যেখানে প্রতিটি অক্ষর একটি 8-বিট বাইট উপস্থাপন করে - এটির মধ্যে এর মান হবে 0 এবং এর0xff । এর অর্থ এই নয় যে এটি ASCII - সম্ভবত আপনি যদি এই ফাংশনটি মোটেও ব্যবহার করছেন তবে আপনি বাইনারি ডেটা দিয়ে কাজ করবেন এবং পাঠ্য নয় বলে প্রত্যাশা করছেন।

আরো দেখুন:


47
নোট করুন যে এটি ওয়েবকিট ব্রাউজারগুলির জন্য যেমন সাফারিও কাজ করে।
ড্যানিয়েল ভন Fange

5
তবে এটি আইওএস ৪.১ সহ আইফোন ৩ জি তে কাজ করে না। আইফোন 4 বা আইফোন সেট করার সময় এটি সিমুলেটর আইফোন সিমুলেটারে কাজ করে।
অনুদান দিন

28
ইউনিকোড স্ট্রিংগুলির জন্য দয়া করে বিশেষ বিবেচনাটি নোট করুন: বিকাশকারী.মোজিলা.অর্গ / এএন / ডম / উইন্ডো.বটোয়া# ইউনিকোড_সটিরিংস বিটিও এবং এটোব কেবলমাত্র এএসসিআইআই ভিত্তিক স্ট্রিংয়ের জন্য সঠিকভাবে কাজ করে। আমেরিকান হিসাবে, আপনি সম্ভবত কোনও পার্থক্য লক্ষ্য করবেন না ... তবে আপনি যখন প্রথমবার কোনও উচ্চারণযুক্ত চরিত্র ব্যবহার করবেন তখন আপনার কোডটি ভেঙে যাবে।
ড্যান এস্পারজা

70
আপনি ব্যবহার করা উচিত btoa(unescape(encodeURIComponent(str))))যদি Str UFT8 হয়
সেট

4
আমার সম্পাদনা দেখুন, @ ট্রাইঙ্কো। এগুলি পাঠ্য , পিরিয়ড প্রক্রিয়া করার জন্য ব্যবহৃত হয় না ।
শোগ

289

এখান থেকে :

/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/
var Base64 = {

// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

// public method for encoding
encode : function (input) {
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;

    input = Base64._utf8_encode(input);

    while (i < input.length) {

        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }

        output = output +
        this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
        this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

    }

    return output;
},

// public method for decoding
decode : function (input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;

    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

    while (i < input.length) {

        enc1 = this._keyStr.indexOf(input.charAt(i++));
        enc2 = this._keyStr.indexOf(input.charAt(i++));
        enc3 = this._keyStr.indexOf(input.charAt(i++));
        enc4 = this._keyStr.indexOf(input.charAt(i++));

        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;

        output = output + String.fromCharCode(chr1);

        if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
        }

    }

    output = Base64._utf8_decode(output);

    return output;

},

// private method for UTF-8 encoding
_utf8_encode : function (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++) {

        var c = string.charCodeAt(n);

        if (c < 128) {
            utftext += String.fromCharCode(c);
        }
        else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        }
        else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }

    }

    return utftext;
},

// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length ) {

        c = utftext.charCodeAt(i);

        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        }
        else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }

    }

    return string;
}

}

এছাড়াও, "জাভাস্ক্রিপ্ট বেস 64 এনকোডিং" অনুসন্ধানের ফলে প্রচুর অন্যান্য বিকল্প দেখা যায়, উপরেরটি প্রথমটি ছিল।


3
যখন বেস 64 এনকোডিংটি মানহীন হয় এটিও কার্যকর; আমার ক্ষেত্রে "/" চরিত্রটি ব্যবহৃত হয়নি, এবং "?" পরিবর্তে অক্ষর ব্যবহার করা হয়েছিল, এমনকি ক্রোম atob () এর মধ্যেও আগত বেস 64 স্ট্রিংগুলি ডিকোড করতে যাচ্ছিল না।
ক্রিস মোসচিনি

21
এই কোডটি সম্পর্কে সতর্ক থাকুন - এটি আপনার স্ট্রিংটিকে ইউটিএফ -8 এনকোডেড স্ট্রিং হিসাবে ব্যাখ্যা করার চেষ্টা করে। আমাদের ক্ষেত্রে একটি বাইনারি স্ট্রিং রয়েছে (যেমন স্ট্রিংয়ের প্রতিটি অক্ষরকে বাইট হিসাবে ব্যাখ্যা করা উচিত) এবং এই কোডটি ডেটাটিকে দূষিত করেছিল। উত্স পড়ুন, লুক।
ড্যানিয়েল ইয়ানকোভস্কি

11
string = string.replace(/\r\n/g,"\n");Utf8 এনকোডিং পদ্ধতিতে প্রশ্নবিদ্ধ বিবৃতি অপসারণ করতে এটি বেশিরভাগ বাইনারি এনকোডিং / ডিকোডিংয়ের জন্য এটি নিরাপদ করার জন্য প্রয়োজনীয় All
মারিয়াস

7
@ মারিয়াস: আমি ভাবছি কেন তারা এমনকি string = string.replace(/\r\n/g,"\n");প্রথম স্থানটিতে অন্তর্ভুক্ত থাকবে , হ্যাঁ। এটি "ওহ, এর মতো এই স্ট্রিংটিকে এনকোড করতে দেয় তবে প্রথমে, আমরা কেন এলোমেলোভাবে কোনও কারণ ছাড়াই সমস্ত লাইন ব্রেকগুলি স্বাভাবিক করি না"। এটি পুরোপুরি সমস্ত পরিস্থিতিতে ক্লাস থেকে অপসারণ করা উচিত।
ট্রায়ঙ্কো

2
আমি জাভাস্ক্রিপ্ট গুরু নই, তবে এই কোডটিতে একটি বাগ রয়েছে বলে মনে হচ্ছে: যদি chr2 NaN হয় তবে এর মানটি এখনও স্টেটমেন্টে ব্যবহৃত হয় enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);। আমার ব্রাউজারে এটি ঠিক আছে, NaN>>40 এর সমান হয় তবে আমি জানি না যে সমস্ত ব্রাউজারগুলি এটি করে (এটিও NaN/16NaN এর সমান)।
জানু

117

ইন্টারনেট এক্সপ্লোরার 10+

// Define the string
var string = 'Hello World!';

// Encode the String
var encodedString = btoa(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"

// Decode the String
var decodedString = atob(encodedString);
console.log(decodedString); // Outputs: "Hello World!"

ক্রস ব্রাউজার

// Create Base64 Object
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}

// Define the string
var string = 'Hello World!';

// Encode the String
var encodedString = Base64.encode(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"

// Decode the String
var decodedString = Base64.decode(encodedString);
console.log(decodedString); // Outputs: "Hello World!"

jsFiddle


নোড.জেএস সহ

আপনি এখানে Node.js তে বেস টেক্সটটি বেস 64 এ কীভাবে এনকোড করবেন:

//Buffer() requires a number, array or string as the first parameter, and an optional encoding type as the second parameter. 
// Default is utf8, possible encoding types are ascii, utf8, ucs2, base64, binary, and hex
var b = new Buffer('JavaScript');
// If we don't use toString(), JavaScript assumes we want to convert the object to utf8.
// We can make it convert to other formats by passing the encoding type to toString().
var s = b.toString('base64');

এবং এখানে আপনি বেস 64 এনকোডযুক্ত স্ট্রিংগুলি কীভাবে ডিকোড করবেন:

var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')
var s = b.toString();

Dojo.js এর সাথে

Dojox.encoding.base64 ব্যবহার করে একটি বাইটের অ্যারে এনকোড করতে:

var str = dojox.encoding.base64.encode(myByteArray);

একটি বেস 64-এনকোড স্ট্রিংটি ডিকোড করতে:

var bytes = dojox.encoding.base64.decode(str)

বোর ইনস্টল কৌণিক-বেস 64

<script src="bower_components/angular-base64/angular-base64.js"></script>

angular
    .module('myApp', ['base64'])
    .controller('myController', [

    '$base64', '$scope', 
    function($base64, $scope) {

        $scope.encoded = $base64.encode('a string');
        $scope.decoded = $base64.decode('YSBzdHJpbmc=');
}]);

3
এই উত্তরটি মূল কোডের ভিত্তিতে এবং এখানে অন্য উত্তরে পোস্ট করা কোডটির আপডেটগুলি অন্তর্ভুক্ত করে না।
ইউজিন রায়বতসেভ

প্রস্তাবিত নোডজেএস সমাধানটি হ্রাস করা হয়েছে।
ভ্লাদিমির নুল

94

আইনি 7 এ "এটি" উল্লেখ করার কারণে সানির কোডটি দুর্দান্ত। "বেস 64" এর সাথে এই জাতীয় রেফারেন্সগুলি প্রতিস্থাপন করে স্থির করা হয়েছে:

var Base64 = {
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

// public method for encoding
encode : function (input) {
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;

    input = Base64._utf8_encode(input);

    while (i < input.length) {

        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }

        output = output +
        Base64._keyStr.charAt(enc1) + Base64._keyStr.charAt(enc2) +
        Base64._keyStr.charAt(enc3) + Base64._keyStr.charAt(enc4);

    }

    return output;
},

// public method for decoding
decode : function (input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;

    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

    while (i < input.length) {

        enc1 = Base64._keyStr.indexOf(input.charAt(i++));
        enc2 = Base64._keyStr.indexOf(input.charAt(i++));
        enc3 = Base64._keyStr.indexOf(input.charAt(i++));
        enc4 = Base64._keyStr.indexOf(input.charAt(i++));

        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;

        output = output + String.fromCharCode(chr1);

        if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
        }

    }

    output = Base64._utf8_decode(output);

    return output;

},

// private method for UTF-8 encoding
_utf8_encode : function (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++) {

        var c = string.charCodeAt(n);

        if (c < 128) {
            utftext += String.fromCharCode(c);
        }
        else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        }
        else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }

    }

    return utftext;
},

// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length ) {

        c = utftext.charCodeAt(i);

        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        }
        else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }

    }
    return string;
}
}

4
ওরে আমার খারাপ, আমি ব্রাউজারের ইউআরএল থেকে ইনপুট নিচ্ছিলাম; যেখানে | % 7C তে রূপান্তরিত হয়; সুতরাং এনকোডিংও ভুল wrong
কানাগাভেলু সুগুমার

আমি জানি এটি সত্যই পুরানো, তবে আমি এই ফাংশনটি একাধিক স্থানে ব্যবহার করতে দেখেছি, কী স্ট্রিংটি আসলে characters৪ টি অক্ষরে, 64৪ নয়। এটা যদি হয়?
জোনাথন ওয়াগনার

"কঠোর ব্যবহার"; 'এই' এবং অন্যান্য ধরণের উপাদানগুলির সাথে 'উইথ' ব্রেক করে এবং যা পড়েছি তা থেকে 'ইভাল' বাশিং পায়। অপব্যবহারের উপর সব ভুল ধারণা রাখা। ব্যক্তিগতভাবে আমি দেখতে পাচ্ছি না কেন জাভাস্ক্রিপ্টটি যে পথে চলছে তার নিচে যেতে হবে, এটি কখনই কোনও প্রোগ্রামকে শক্তভাবে আবদ্ধ করা এবং এটি ইতিমধ্যে যত জটিল করে তুলেছে তা বোঝানো হয়নি। আপনি যদি আবদ্ধ হতে চান তবে জাভাস্ক্রিপ্টের জন্য একটি সংকলক তৈরি করুন।
গিবলিন

আমি এই ফাংশনটি ব্যবহার করার চেষ্টা করি এবং আমি ত্রুটিটি পেয়েছি: এর ফলে: org.mozilla.javascript.EcmaError: TypeError: ফাংশনটি প্রতিস্থাপন করতে পারছি না অবজেক্ট টেস্ট টেস্ট টেস্টে আমি এনকোড করার চেষ্টা করছি। Txt "টেস্ট টেস্ট টেস্ট" দিয়ে। এই ত্রুটি কেন কেউ জানে?
PRVS

@ জোনাথন ওয়াগনার - সাধারণ এনকোডিংয়ের জন্য এখানে 64 টি অক্ষর ব্যবহৃত হয়। 65 তম অক্ষরটি প্যাডিং হিসাবে ব্যবহৃত হয় ইনপুট স্ট্রিংটিতে 3 দ্বারা বিভাজ্য অক্ষরের সংখ্যা নেই
কিকস্টার্ট

90

তুমি ব্যবহার করতে পার btoa (বেস-64৪ থেকে) এবং atob(বেস-64৪ থেকে ) ।

আইই 9 এবং নীচের জন্য, jquery-বেস 64 প্লাগইন চেষ্টা করুন :

$.base64.encode("this is a test");
$.base64.decode("dGhpcyBpcyBhIHRlc3Q=");

133
কেন সব কিছুতে jQuery প্লাগইন হওয়া দরকার: সি এটি কেবল মূল জাভাস্ক্রিপ্ট কার্যকারিতা যার DOM বা jQuery এর সাথে কোন সম্পর্ক নেই
ইটারআফকোড

38
এটি কোনও মূল কার্যকারিতা নয় বা এর চেয়ে বেশি উচ্চ ভোটের মতো উত্তর নেই (ডু-কোড-নিজেই টিএল; ডাঃ কোড সহ)। সুতরাং, ইমো এটি আসলে jQuery (একটি লাইনার, এমনকি অ্যান্ড্রয়েডের ওয়েবভিউতেও কাজ করবে বলে আশা করা যায়) - এর জন্য এটি ইতিমধ্যে নির্ভরতা যদি আরও বেশি হয় for
রিসাদিনহা

1
আমি এই জাতীয় কোড স্নিপেটগুলি jQuery এ ইনস্টল করতে চাই মূলত কারণ এগুলি একটি নিয়ন্ত্রিত নেমস্পেসে বিদ্যমান। আপনি যদি এএমডি বা কমনজেএস বা কোনও অনুরূপ ডিজাইনের প্যাটার্ন ব্যবহার না করে থাকেন তবে আপনার গ্লোবাল নেমস্পেসের জন্য একগুচ্ছ এলোমেলো ফাংশনগুলির সাথে অগোছালো হওয়া সহজ।
এসএফসিসি

9
@ রিসাদিনহা - এর কার্যকারিতা ব্যতীত কোন কিছু jQuery এর উপর নির্ভর করে বা প্রসারিত করে না ... আক্ষরিক অর্থে এর কোডটিতে jQuery এর একমাত্র উল্লেখগুলি এটি jQuery অবজেক্টের সাথে সংযুক্ত করছে ... সুতরাং এটি jQuery এর সাথে সংযুক্ত হওয়ার কী দরকার এবং তাই প্রয়োজনীয় jQuery ব্যবহার করতে চান? কেবল এটির নিজস্ব 1 লাইনার তৈরি করুন base64.encode(...)এবং base64.decode(...)... যখন শূন্য জিকুয়ের নির্দিষ্ট কার্যকারিতা থাকে তখন এটি jQuery এর সাথে সংযুক্ত করা একেবারেই কোনও
অর্থবোধ করে

1
jQuery অনুরোধ করা হয়নি। সাধারণ পুরানো জেএস প্রশ্নের বৈধ উত্তর নয়।
মেটা কলিন

34

গৃহীত উত্তরের নীচে মন্তব্যগুলি (এসইটি এবং স্টেফান স্টেইগার দ্বারা) থেকে, এখানে কোনও লাইব্রেরির প্রয়োজন ছাড়াই বেস64 থেকে / থেকে কোনও স্ট্রিং কীভাবে এনকোড / ডিকোড করা যায় তার একটি দ্রুত সংক্ষিপ্তসার এখানে দেওয়া হয়েছে।

str = "The quick brown fox jumps over the lazy dog";
b64 = btoa(unescape(encodeURIComponent(str)));
str = decodeURIComponent(escape(window.atob(b64)));

ডেমো

(jQuery লাইব্রেরি ব্যবহার করে তবে এনকোড / ডিকোডের জন্য নয়)


নিশ্চিত করতে, এটি ইউটিএফ -8 অক্ষরকে সমর্থন করে?
ক্র্যাশলোট

1
@ ক্র্যাশলোট আমি বুঝতে পারি যে এটি দুই বছর অনেক দেরি হয়ে গেছে, তবে হ্যাঁ এটি হয় does আমি টাইপ করার সাথে সাথে আমি ঠিক উপলব্ধি করছি যে আপনি এমন একটি সম্পাদনা সরবরাহ করেছেন যা সম্ভবত ইউটিএফ 8 কাজ করেছে।
tycrek

এখানে যে কেউ নোড.জেএস এর সাথে ব্যবহারের জন্য ভাল সমাধান খুঁজছেন, আমি এই কাজগুলি নিশ্চিত করতে পারি। Buffer.from(b64data, 'base64').toString();
নোডে

26

উভয় বাস্তবায়নের ক্ষেত্রে বেশ কয়েকটি বাগ রয়েছে _utf8_decodec1এবং স্টেটমেন্টের c2ভাঙা ব্যবহারের কারণে এবং বৈশ্বিক চলক হিসাবে নির্ধারিত হয়েছেvarc3 সক্রিয়া বা ঘোষণা করা হয় এ সব।

এটি কাজ করে, তবে এই ভেরিয়েবলগুলি এই ফাংশনের বাইরে একই নামের যে কোনও বিদ্যমান ওভাররাইট করে।

এখানে এমন একটি সংস্করণ রয়েছে যা এটি করবে না:

// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = 0, c1 = 0, c2 = 0;

    while ( i < utftext.length ) {

        c = utftext.charCodeAt(i);

        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c1 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
            i += 2;
        }
        else {
            c1 = utftext.charCodeAt(i+1);
            c2 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
            i += 3;
        }

    }
    return string;
}

9
@ দান আমি যখন এই উত্তরটি লিখেছিলাম তখন আমার সম্পাদনা করার মতো পর্যাপ্ত সংবাদ নেই ... ২০১১ সালে।
রোবাল

2
আই 7? আমি অনুমান করি যে এর জন্য কোড লেখার জন্য আমাদের সময় নষ্ট করা বন্ধ করা উচিত, যদি না আমরা বিকাশকারীরা তাদের বাধ্য না করে মানুষ এই পুরানো প্রযুক্তি ব্যবহার বন্ধ করবে না!
রামি দাবাইন

@ রোনানডেজেরো আইই 7 তে কাজ করে না? আমি মনে করি না আমি সেই নির্দিষ্ট ব্রাউজারে পরীক্ষা করেছি কিনা।
ছিনিয়ে

1
আমি কী বোঝাতে চাইছিলাম এটি যদি আই 7 এ কাজ না করে তবে কারও যত্ন নেওয়া উচিত নয়! আমি পরীক্ষা করিনি এবং এটি পরীক্ষা করব না :)
রামি দাবাইন

16

আমি সানির উত্তরটি +1 করেছি, তবে আমার নিজের প্রকল্পের জন্য যে কিছু পরিবর্তন হয়েছে সে ক্ষেত্রে এটির জন্য আমি কিছু পরিবর্তন করেছি contribute মূলত আমি কেবলমাত্র আসল কোডটি একটু পরিষ্কার করেছি যাতে জেএসলিন্ট ততটা অভিযোগ করেন না, এবং মন্তব্যে ব্যক্তিগত হিসাবে চিহ্নিত পদ্ধতিগুলি আসলে ব্যক্তিগতভাবে তৈরি করেছি। আমি আমার নিজস্ব প্রকল্পে আমার দুটি পদ্ধতিও যুক্ত করেছিলাম, নাম decodeToHexএবংencodeFromHex

কোড:

var Base64 = (function() {
    "use strict";

    var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    var _utf8_encode = function (string) {

        var utftext = "", c, n;

        string = string.replace(/\r\n/g,"\n");

        for (n = 0; n < string.length; n++) {

            c = string.charCodeAt(n);

            if (c < 128) {

                utftext += String.fromCharCode(c);

            } else if((c > 127) && (c < 2048)) {

                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);

            } else {

                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);

            }

        }

        return utftext;
    };

    var _utf8_decode = function (utftext) {
        var string = "", i = 0, c = 0, c1 = 0, c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {

                string += String.fromCharCode(c);
                i++;

            } else if((c > 191) && (c < 224)) {

                c1 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
                i += 2;

            } else {

                c1 = utftext.charCodeAt(i+1);
                c2 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
                i += 3;

            }

        }

        return string;
    };

    var _hexEncode = function(input) {
        var output = '', i;

        for(i = 0; i < input.length; i++) {
            output += input.charCodeAt(i).toString(16);
        }

        return output;
    };

    var _hexDecode = function(input) {
        var output = '', i;

        if(input.length % 2 > 0) {
            input = '0' + input;
        }

        for(i = 0; i < input.length; i = i + 2) {
            output += String.fromCharCode(parseInt(input.charAt(i) + input.charAt(i + 1), 16));
        }

        return output;
    };

    var encode = function (input) {
        var output = "", chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;

        input = _utf8_encode(input);

        while (i < input.length) {

            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);

            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;

            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }

            output += _keyStr.charAt(enc1);
            output += _keyStr.charAt(enc2);
            output += _keyStr.charAt(enc3);
            output += _keyStr.charAt(enc4);

        }

        return output;
    };

    var decode = function (input) {
        var output = "", chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;

        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

        while (i < input.length) {

            enc1 = _keyStr.indexOf(input.charAt(i++));
            enc2 = _keyStr.indexOf(input.charAt(i++));
            enc3 = _keyStr.indexOf(input.charAt(i++));
            enc4 = _keyStr.indexOf(input.charAt(i++));

            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;

            output += String.fromCharCode(chr1);

            if (enc3 !== 64) {
                output += String.fromCharCode(chr2);
            }
            if (enc4 !== 64) {
                output += String.fromCharCode(chr3);
            }

        }

        return _utf8_decode(output);
    };

    var decodeToHex = function(input) {
        return _hexEncode(decode(input));
    };

    var encodeFromHex = function(input) {
        return encode(_hexDecode(input));
    };

    return {
        'encode': encode,
        'decode': decode,
        'decodeToHex': decodeToHex,
        'encodeFromHex': encodeFromHex
    };
}());

আমি প্রথমে ভেবেছিলাম আপনার পৃথক স্টেটমেন্টে আউটপুট কনটেনটেশনটির তালিকাভুক্তি আরও অনুকূল হবে, তবে আমি এটি একটি সেকেন্ডের জন্য চিন্তা করার পরে, এটি আরও অকার্যকর হওয়া উচিত কারণ জাভাস্ক্রিপ্টের স্ট্রিংগুলি অপরিবর্তনীয় এবং কাজ করার সময় এটি 4 টি অনুলিপি সম্ভাব্য বিশাল ব্লব তৈরি করতে পারে বড় বাইনারি তথ্য ফাইল সহ। প্রথমে চারটি অক্ষর একত্রিত করা এবং তারপরে একটি নতুন স্ট্রিং তৈরি করা নিরাপদ বাজি। আমি আশা করি আমি আরও ভাল স্ট্রিং বিল্ডিং পদ্ধতির জন্য জানতাম যা সমস্ত প্ল্যাটফর্মগুলিতে দক্ষ হওয়ার বিষয়ে নিশ্চিত ছিল। (এমনকি আই 6)
মারিয়াস

আমি মূলত পোস্ট করা কোডটি পরিষ্কার করার ক্ষেত্রে পারফরম্যান্স বিবেচনা করি নি। আমি এটিকে আরও পঠনযোগ্য করে তুলেছি এবং মূল মন্তব্যে ব্যক্তিগত হিসাবে চিহ্নিত পদ্ধতিগুলি প্রকাশক মডিউল প্যাটার্নটি ব্যবহার করে প্রকৃতপক্ষে ব্যক্তিগত হবে। আমি নিশ্চিত যে এটি পারফরম্যান্সের ক্ষেত্রেও অনুকূলিত হতে পারে। এখানে কখন আবর্জনা সংগ্রহ করা শুরু হবে তা নিশ্চিত নয় এবং জাভাস্ক্রিপ্টের মাধ্যমে বড় বড় ফাইলগুলি হ্যাস করা খুব সাধারণ বিষয় নয় (বা সম্ভবত কোনও ক্ষেত্রে অনুকূল সমাধান নয়)।
জো ডিনডালে

মজার বিষয় এই কোড এখানে জীবন সাজানোর কিভাবে। ইতিমধ্যে এই পৃষ্ঠায় 3 বিভিন্ন সংস্করণ আছে।
গ্রেগন 3

14

নতুন ব্রাউজারগুলির জন্য ইউন্ট 8আরিকে স্ট্রিংয়ে এনকোড করতে এবং স্ট্রিংটি ইউিন্ট 8আরে ডিকোড করতে।

const base64 = {
    decode: s => Uint8Array.from(atob(s), c => c.charCodeAt(0)),
    encode: b => btoa(String.fromCharCode(...new Uint8Array(b)))
};

নোড.জেএস এর জন্য আপনি স্ট্রিং, বাফার, বা ইউিন্ট 8 অ্যারে স্ট্রিংতে এনকোড করতে এবং স্ট্রিং, বাফার বা ইউন্ট 8 অ্যারে থেকে বাফার পর্যন্ত ডিকোড করতে পারেন following

const base64 = {
    decode: s => Buffer.from(s, 'base64'),
    encode: b => Buffer.from(b).toString('base64')
};

13

একটি বেস 64 এনকোডড স্ট্রিং ইউআরএলকে বন্ধুত্বপূর্ণ করতে, জাভাস্ক্রিপ্টে আপনি এরকম কিছু করতে পারেন:

// if this is your Base64 encoded string
var str = 'VGhpcyBpcyBhbiBhd2Vzb21lIHNjcmlwdA=='; 

// make URL friendly:
str = str.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, '');

// reverse to original encoding
str = (str + '===').slice(0, str.length + (str.length % 4));
str = str.replace(/-/g, '+').replace(/_/g, '/');

এই ফিডলটিও দেখুন: http://jsfiddle.net/magikMaker/7bjaT/


9
আমি বিনীতভাবে পরামর্শ দেব যে encodeURIComponentবিকাশকারীর পক্ষ থেকে কম পরিশ্রম করে এর ব্যবহারের ফলে উচ্চতর ফলাফল হতে পারে।
পাবলো ফার্নান্দেজ

11
এনকোডিউআরআইকিউম্পোনমেন্টটি ইউএসএল-তে বেস 64 ব্যবহার করার সময় বেস 64 এবং এনকোডেড স্ট্রিংগুলির দৈর্ঘ্য পরিবর্তন করবে এবং '-' এবং '_' এর পরিবর্তে '+' এবং '/' প্রতিস্থাপন করা স্ট্যান্ডার্ড অনুশীলন হবে (উদাহরণস্বরূপ ডক্টস.পিথন.আর.লাইবারি / বেসেএসএসটিভিটি :) .urlsafe_b64encode )। মন খারাপ করার দরকার নেই।
নাতিভ

12

দয়া করে নোট করুন যে এটি কাঁচা ইউনিকোড স্ট্রিংয়ের জন্য উপযুক্ত নয়! ইউনিকোড বিভাগটি এখানে দেখুন

এনকোডিংয়ের জন্য সিনট্যাক্স

var encodedData = window.btoa(stringToEncode);

ডিকোডিংয়ের জন্য সিনট্যাক্স

var decodedData = window.atob(encodedData);


1
ইউনিকোড বিভাগে সরাসরি লিঙ্ক: বিকাশকারী.মোজিলা.আর.ইন.ইউএস
ডকস

12

আমি হাত দিয়ে পুনরায় লিখেছি, এই এনকোডিং এবং ডিকোডিং পদ্ধতিগুলি হেক্সাডেসিমাল ব্যতীত ক্রস-প্ল্যাটফর্ম / ব্রাউজারের সামঞ্জস্যের জন্য একটি মডিউল ফর্ম্যাটে এবং বাস্তব ব্যক্তিগত স্কোপিং সহ, এবং ব্যবহারগুলি btoaএবং atobযদি সেগুলি ব্যবহারের পরিবর্তে গতির কারণে বিদ্যমান থাকে নিজস্ব এনকোডিং:

https://gist.github.com/Nijikokun/5192472

ব্যবহার:

base64.encode(/* String */);
base64.decode(/* String */);

utf8.encode(/* String */);
utf8.decode(/* String */);

12

এই প্রশ্ন এবং এর উত্তরগুলি আমাকে সঠিক দিক নির্দেশ করেছে।
বিশেষত ইউনিকোড অ্যাটব এবং বিটিওএতে "ভ্যানিলা" ব্যবহার করা যায় না এবং আজকাল সমস্ত কিছুই ইউনিকোড হয় ..

সরাসরি মজিলা থেকে, এই উদ্দেশ্যে দুটি দুর্দান্ত ফাংশন (ভিতরে ইউনিকোড এবং এইচটিএমএল ট্যাগ দিয়ে পরীক্ষা করা)

function b64EncodeUnicode(str) {
    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode('0x' + p1);
    }));
}

b64EncodeUnicode('✓ à la mode'); // "4pyTIMOgIGxhIG1vZGU="
b64EncodeUnicode('\n'); // "Cg=="



function b64DecodeUnicode(str) {
    return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));
}

b64DecodeUnicode('4pyTIMOgIGxhIG1vZGU='); // "✓ à la mode"
b64DecodeUnicode('Cg=='); // "\n"

এই ফাংশনগুলি কাঁচা জাভাস্ক্রিপ্ট ফাংশন ব্যবহার করে কাঁচা বেস 64 এর ডিকোডিংয়ের তুলনায় বজ্রপাত দ্রুত সঞ্চালন করবে কারণ বিটিওএ এবং এটোব ইন্টারপ্রেটারের বাইরে কার্যকর হয়।

আপনি যদি পুরানো আই এবং পুরানো মোবাইল ফোনগুলি উপেক্ষা করতে পারেন (আইফোন 3? এর মতো) তবে এটির একটি ভাল সমাধান হওয়া উচিত।


10

যদি আপনার এইচটিএমএল চিত্রের অবজেক্টটি এনকোড করা দরকার হয় তবে আপনি সাধারণ ফাংশন যেমন:

function getBase64Image(img) {  
  var canvas = document.createElement("canvas");  
  canvas.width = img.width;  
  canvas.height = img.height;  
  var ctx = canvas.getContext("2d");  
  ctx.drawImage(img, 0, 0);  
  var dataURL = canvas.toDataURL("image/png");  
  // escape data:image prefix
  return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");  
  // or just return dataURL
  // return dataURL
}  

আইডি দ্বারা চিত্রের বেস 64 পেতে:

function getBase64ImageById(id){  
  return getBase64Image(document.getElementById(id));  
} 

আরও এখানে


হ্যাঁ, এবং ভার img = নতুন চিত্র (); img.src = "../images/myPic.png";
পিডিএসচুলার

7

আমি বর্তমানে ব্যবহার করছি এমন window.atob+ এর জন্য একটি মিনিফাইড পলিফিলের সাথে অবদান window.btoa

(function(){function t(t){this.message=t}var e="undefined"!=typeof exports?exports:this,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";t.prototype=Error(),t.prototype.name="InvalidCharacterError",e.btoa||(e.btoa=function(e){for(var o,n,a=0,i=r,c="";e.charAt(0|a)||(i="=",a%1);c+=i.charAt(63&o>>8-8*(a%1))){if(n=e.charCodeAt(a+=.75),n>255)throw new t("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");o=o<<8|n}return c}),e.atob||(e.atob=function(e){if(e=e.replace(/=+$/,""),1==e.length%4)throw new t("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,n,a=0,i=0,c="";n=e.charAt(i++);~n&&(o=a%4?64*o+n:n,a++%4)?c+=String.fromCharCode(255&o>>(6&-2*a)):0)n=r.indexOf(n);return c})})();

6

আমি বরং ক্রিপ্টোজেএস থেকে বেস 64 এনকোড / ডিকোড পদ্ধতিগুলি ব্যবহার করেছি, সেরা অনুশীলন এবং নিদর্শন ব্যবহার করে জাভাস্ক্রিপ্টে প্রয়োগ করা স্ট্যান্ডার্ড এবং সুরক্ষিত ক্রিপ্টোগ্রাফিক অ্যালগরিদমগুলির জন্য সর্বাধিক জনপ্রিয় লাইব্রেরি।


6

এখানে @ ব্যবহারকারী 850789 এর একটি অ্যাঙ্গুলারজেএস কারখানার সংস্করণ রয়েছে:

'use strict';

var ProjectNameBase64Factory = angular.module('project_name.factories.base64', []);

ProjectNameBase64Factory.factory('Base64', function () {
    var Base64 = {
        // private property
        _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

        // public method for encoding
        encode: function (input) {
            var output = "";
            var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
            var i = 0;

            input = Base64._utf8_encode(input);

            while (i < input.length) {

                chr1 = input.charCodeAt(i++);
                chr2 = input.charCodeAt(i++);
                chr3 = input.charCodeAt(i++);

                enc1 = chr1 >> 2;
                enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                enc4 = chr3 & 63;

                if (isNaN(chr2)) {
                    enc3 = enc4 = 64;
                } else if (isNaN(chr3)) {
                    enc4 = 64;
                }

                output = output +
                         Base64._keyStr.charAt(enc1) + Base64._keyStr.charAt(enc2) +
                         Base64._keyStr.charAt(enc3) + Base64._keyStr.charAt(enc4);

            }

            return output;
        },

        // public method for decoding
        decode: function (input) {
            var output = "";
            var chr1, chr2, chr3;
            var enc1, enc2, enc3, enc4;
            var i = 0;

            input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

            while (i < input.length) {

                enc1 = Base64._keyStr.indexOf(input.charAt(i++));
                enc2 = Base64._keyStr.indexOf(input.charAt(i++));
                enc3 = Base64._keyStr.indexOf(input.charAt(i++));
                enc4 = Base64._keyStr.indexOf(input.charAt(i++));

                chr1 = (enc1 << 2) | (enc2 >> 4);
                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                chr3 = ((enc3 & 3) << 6) | enc4;

                output = output + String.fromCharCode(chr1);

                if (enc3 != 64) {
                    output = output + String.fromCharCode(chr2);
                }
                if (enc4 != 64) {
                    output = output + String.fromCharCode(chr3);
                }

            }

            output = Base64._utf8_decode(output);

            return output;

        },

        // private method for UTF-8 encoding
        _utf8_encode: function (string) {
            string = string.replace(/\r\n/g, "\n");
            var utftext = "";

            for (var n = 0; n < string.length; n++) {

                var c = string.charCodeAt(n);

                if (c < 128) {
                    utftext += String.fromCharCode(c);
                }
                else if ((c > 127) && (c < 2048)) {
                    utftext += String.fromCharCode((c >> 6) | 192);
                    utftext += String.fromCharCode((c & 63) | 128);
                }
                else {
                    utftext += String.fromCharCode((c >> 12) | 224);
                    utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                    utftext += String.fromCharCode((c & 63) | 128);
                }

            }

            return utftext;
        },

        // private method for UTF-8 decoding
        _utf8_decode: function (utftext) {
            var string = "";
            var i = 0;
            var c = 0, c2 = 0, c3 = 0;

            while (i < utftext.length) {

                c = utftext.charCodeAt(i);

                if (c < 128) {
                    string += String.fromCharCode(c);
                    i++;
                }
                else if ((c > 191) && (c < 224)) {
                    c2 = utftext.charCodeAt(i + 1);
                    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                    i += 2;
                }
                else {
                    c2 = utftext.charCodeAt(i + 1);
                    c3 = utftext.charCodeAt(i + 2);
                    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                    i += 3;
                }

            }
            return string;
        }
    };
    return Base64;
});

6

আমার একটি প্রকল্পের জন্য বেস 64 হিসাবে একটি ইউটিএফ -8 স্ট্রিংয়ের এনকোডিং দরকার। এখানে বেশিরভাগ উত্তর ইউটিএফ -১ sur রূপান্তর করার সময় ইউটিএফ -১ sur সারোগেট জোড়গুলি সঠিকভাবে পরিচালনা করবে বলে মনে হয় না, সুতরাং সমাপ্তির জন্য, আমি আমার সমাধান পোস্ট করব:

function strToUTF8Base64(str) {

    function decodeSurrogatePair(hi, lo) {
        var resultChar = 0x010000;
        resultChar += lo - 0xDC00;
        resultChar += (hi - 0xD800) << 10;
        return resultChar;
    }

    var bytes = [0, 0, 0];
    var byteIndex = 0;
    var result = [];

    function output(s) {
        result.push(s);
    }

    function emitBase64() {

        var digits =
                'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
                'abcdefghijklmnopqrstuvwxyz' +
                '0123456789+/';

        function toDigit(value) {
            return digits[value];
        }

        // --Byte 0--    --Byte 1--    --Byte 2--
        // 1111  1122    2222  3333    3344  4444

        var d1 = toDigit(bytes[0] >> 2);
        var d2 = toDigit(
            ((bytes[0] & 0x03) << 4) |
            (bytes[1] >> 4));
        var d3 = toDigit(
            ((bytes[1] & 0x0F) << 2) |
            (bytes[2] >> 6));
        var d4 = toDigit(
            bytes[2] & 0x3F);

        if (byteIndex === 1) {
            output(d1 + d2 + '==');
        }
        else if (byteIndex === 2) {
            output(d1 + d2 + d3 + '=');
        }
        else {
            output(d1 + d2 + d3 + d4);
        }
    }

    function emit(chr) {
        bytes[byteIndex++] = chr;
        if (byteIndex == 3) {
            emitBase64();
            bytes[0] = 0;
            bytes[1] = 0;
            bytes[2] = 0;
            byteIndex = 0;
        }
    }

    function emitLast() {
        if (byteIndex > 0) {
            emitBase64();
        }
    }

    // Converts the string to UTF8:

    var i, chr;
    var hi, lo;
    for (i = 0; i < str.length; i++) {
        chr = str.charCodeAt(i);

        // Test and decode surrogate pairs in the string
        if (chr >= 0xD800 && chr <= 0xDBFF) {
            hi = chr;
            lo = str.charCodeAt(i + 1);
            if (lo >= 0xDC00 && lo <= 0xDFFF) {
                chr = decodeSurrogatePair(hi, lo);
                i++;
            }
        }

        // Encode the character as UTF-8.
        if (chr < 0x80) {
            emit(chr);
        }
        else if (chr < 0x0800) {
            emit((chr >> 6) | 0xC0);
            emit(((chr >> 0) & 0x3F) | 0x80);
        }
        else if (chr < 0x10000) {
            emit((chr >> 12) | 0xE0);
            emit(((chr >>  6) & 0x3F) | 0x80);
            emit(((chr >>  0) & 0x3F) | 0x80);
        }
        else if (chr < 0x110000) {
            emit((chr >> 18) | 0xF0);
            emit(((chr >> 12) & 0x3F) | 0x80);
            emit(((chr >>  6) & 0x3F) | 0x80);
            emit(((chr >>  0) & 0x3F) | 0x80);
        }
    }

    emitLast();

    return result.join('');
}

নোট করুন যে কোডটি পুরোপুরি পরীক্ষিত নয়। strToUTF8Base64('衠衢蠩蠨')একটি অনলাইন এনকোডিং সরঞ্জামের আউটপুট ( https://www.base64encode.org/ ) এর সাথে তুলনা করার মতো জিনিসগুলি সহ আমি কিছু ইনপুট পরীক্ষা করেছি ।


5

আমার প্রকল্পের জন্য আমাকে এখনও আই 7 সমর্থন করতে হবে এবং এনকোডে বড় ইনপুট নিয়ে কাজ করতে হবে।

জো ডিনডালে প্রস্তাবিত কোডের ভিত্তিতে এবং মারিয়াসের মন্তব্যে পরামর্শ অনুসারে, আই 7 এর সাথে স্ট্রিংয়ের পরিবর্তে অ্যারে দিয়ে ফলাফলটি তৈরি করে পারফরম্যান্সের উন্নতি করা সম্ভব।

এখানে এনকোডের উদাহরণ রয়েছে:

var encode = function (input) {
    var output = [], chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;

    input = _utf8_encode(input);

    while (i < input.length) {

        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }

        output.push(_keyStr.charAt(enc1));
        output.push(_keyStr.charAt(enc2));
        output.push(_keyStr.charAt(enc3));
        output.push(_keyStr.charAt(enc4));

    }

    return output.join("");
};

5

কিছুটা বেশি কাজ করার সময়, আপনি যদি উচ্চ পারফরম্যান্সের দেশীয় সমাধান চান তবে কিছু HTML5 ফাংশন আপনি ব্যবহার করতে পারেন।

আপনি যদি কোনওটিতে আপনার ডেটা পেতে পারেন Blobতবে আপনি একটি URL পেতে ফাইলআরডার.ড্রেডএএসডিটাআরএল () ফাংশনটি ব্যবহার করতে পারেন data://এবং বেস 64 এর ডেটা পেতে তার সামনের অংশটি কেটে ফেলতে পারেন।

তথ্যের urldecode করার জন্য আপনাকে আরও প্রক্রিয়াজাতকরণ করতে হতে পারে, কারণ আমি নিশ্চিত নই যে +অক্ষরগুলি data://ইউআরএলটির জন্য পালিয়ে গেছে কিনা , তবে এটি বেশ তুচ্ছ হওয়া উচিত।


5

ঠিক আছে, আপনি যদি ডোজো ব্যবহার করছেন তবে এটি আমাদের বেস 64 এ এনকোড বা ডিকোড করার সরাসরি উপায় দেয়।

এটা চেষ্টা কর:-

Dojox.encoding.base64 ব্যবহার করে একটি বাইটের অ্যারে এনকোড করতে:

var str = dojox.encoding.base64.encode(myByteArray);

একটি বেস 64-এনকোড স্ট্রিংটি ডিকোড করতে:

var bytes = dojox.encoding.base64.decode(str);

3

আপনি ব্যবহার করতে পারেন window.btoaএবং window.atob...

const encoded = window.btoa('Alireza Dezfoolian'); // encode a string
const decoded = window.atob(encoded); // decode the string

সম্ভবত এমডিএন হ'ল উপায়টি আপনার কাজটি সবচেয়ে ভাল করতে পারে ... এছাড়াও ইউনিকোড গ্রহণ করুন ... এই দুটি সাধারণ ফাংশন ব্যবহার করে:

// ucs-2 string to base64 encoded ascii
function utoa(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
}
// base64 encoded ascii to ucs-2 string
function atou(str) {
    return decodeURIComponent(escape(window.atob(str)));
}
// Usage:
utoa('✓ à la mode'); // 4pyTIMOgIGxhIG1vZGU=
atou('4pyTIMOgIGxhIG1vZGU='); // "✓ à la mode"

utoa('I \u2661 Unicode!'); // SSDimaEgVW5pY29kZSE=
atou('SSDimaEgVW5pY29kZSE='); // "I ♡ Unicode!"

3

এখানে একটি হল লাইভ ডেমো এর atob()এবং btoa()ফাংশন সালে নির্মিত জাতীয়:

<!DOCTYPE html>
<html>
  <head>
    <style>
      textarea{
        width:30%;
        height:100px;
      }
    </style>
    <script>
      // encode string to base64
      function encode()
      {
        var txt = document.getElementById("txt1").value;
        var result = btoa(txt);
        document.getElementById("txt2").value = result;
      }
      // decode base64 back to original string
      function decode()
      {
        var txt = document.getElementById("txt3").value;
        var result = atob(txt);
        document.getElementById("txt4").value = result;
      }
    </script>
  </head>
  <body>
    <div>
      <textarea id="txt1">Some text to decode
      </textarea>
    </div>
    <div>
      <input type="button" id="btnencode" value="Encode" onClick="encode()"/>
    </div>
    <div>
      <textarea id="txt2">
      </textarea>
    </div>
    <br/>
    <div>
      <textarea id="txt3">U29tZSB0ZXh0IHRvIGRlY29kZQ==
      </textarea>
    </div>
    <div>
      <input type="button" id="btndecode" value="Decode" onClick="decode()"/>
    </div>
    <div>
      <textarea id="txt4">
      </textarea>
    </div>
  </body>
</html>

2

Js-base64 লাইব্রেরি হিসাবে ব্যবহার করুন

btoa () ইমোজিসের সাথে কাজ করে না

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>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.