ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্টে বেস 64 এনকোডিং এবং ডিকোডিং


270

জাভাস্ক্রিপ্টে এমন কোন পদ্ধতি আছে যা বেস 64 এবং এনকোডিং ব্যবহার করে একটি স্ট্রিং এনকোড এবং ডিকোড করতে ব্যবহার করা যেতে পারে?



উত্তর:


213

ফায়ারফক্স, ক্রোম, সাফারি, অপেরা এবং আই 10 10 এর মতো কিছু ব্রাউজার বেস 64 কে স্থানীয়ভাবে পরিচালনা করতে পারে। এই স্ট্যাকওভারফ্লো প্রশ্নটি একবার দেখুন । এটি ব্যবহার btoa()এবং atob()ফাংশন

সার্ভার-সাইড জাভাস্ক্রিপ্ট (নোড) এর জন্য, আপনি Bufferডিকোড করতে এস ব্যবহার করতে পারেন ।

আপনি যদি ক্রস-ব্রাউজার সমাধানের জন্য যাচ্ছেন তবে ক্রিপ্টোজেএস বা কোড এর মতো বিদ্যমান লাইব্রেরি রয়েছে :

http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html

পরেরটির সাথে ক্রস ব্রাউজারের সামঞ্জস্যের জন্য আপনাকে ফাংশনটি ভালভাবে পরীক্ষা করতে হবে। এবং ত্রুটি ইতিমধ্যে রিপোর্ট করা হয়েছে


1
তারিখ ইউআরআই স্কিম সহ বেস 64 এ কোনও এসভিজিকে এনকোড করতে আমি এই পদ্ধতিটি ব্যবহার করেছি। আশ্চর্য: এই ফাংশনটি প্রতিটি চরিত্রকে সংযুক্ত করে, সুতরাং আমি এই ত্রুটিযুক্ত এক্সএমএলকে লক্ষ্যবস্তু পেয়েছি:% 3C% 3FxML% 20version% 3D% 271.0% 27% 20% 3F% 3E% 3Csvg% 20xMLns% 3D% 27http% ...
ডেরিকসন

21
নোড.জেএস বেস 64 করতে পারে: new Buffer('Hello, world!').toString('base64'); new Buffer('SGVsbG8sIHdvcmxkIQ==', 'base64').toString('ascii'); (উত্স)
nyuszika7h

এবং আমি যদি এটি URL- নিরাপদ করতে চাই?
anddero

1
নোড 5+ এ, বাফার.ফর্ম ব্যবহার করুন, যেমন হ্রাস new Buffer(string)করা হয়েছে। Buffer.from(jwt.split('.')[1], 'base64').toString()
রায় ফস 18

63

গেকো / ওয়েবকিট-ভিত্তিক ব্রাউজারগুলিতে (ফায়ারফক্স, ক্রোম এবং সাফারি) এবং অপেরাতে আপনি বিটিওএ () এবং অটোব () ব্যবহার করতে পারেন ।

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


এটি জীবন রক্ষাকারী। আমি খুব বড় বেস 64 এনকোডযুক্ত স্ট্রিংগুলি ডিকোড করতে কয়েকটি ভিন্ন বাস্তবায়ন ব্যবহার করেছি এবং ফলাফলটি সর্বদা ভুল ছিল। atob () দুর্দান্ত কাজ করে!
b2238488

15
ছোট্ট নিটপিক: অপেরা গেকো বা ওয়েবকিটের উপর ভিত্তি করে নয়, এটি প্রেস্টো নামে নিজস্ব রেন্ডারিং ইঞ্জিন ব্যবহার করে।
পিটার ওলসন

বাহ, এই জন্য ধন্যবাদ। জানেন না এই ব্রাউজারগুলিতে একটি নেটিভ বেস 64 টি এনকোডার রয়েছে!
রব পোর্টার

5
@ পিটারওলসন আর নয় :)
মোস্তফা

1
আমি বুঝতে পারি এটি একটি পুরানো পোস্ট, তবে @ b2238488 এর উদ্বেগ সম্পর্কে, আপনি বেস 64 স্ট্রিংটি বিভক্ত করতে পারেন যাতে প্রতিটি টোকেনের দৈর্ঘ্য 4 এর একাধিক হয় এবং সেগুলি আলাদাভাবে ডিকোড করে। ফলাফলটি একবারে পুরো স্ট্রিংটি ডিকোড করার মতো হবে।
nyuszika7h

56

ইন্টারনেট এক্সপ্লোরার 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!"

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

এএমডি, কমনজেএস, নোডেজ এবং ব্রাউজারগুলির জন্য পুনরায় লিখিত এবং মডুলারিযুক্ত ইউটিএফ -8 এবং বেস 64 জাভাস্ক্রিপ্ট এনকোডিং এবং ডিকোডিং গ্রন্থাগারগুলি / মডিউল। ক্রস ব্রাউজার সামঞ্জস্যপূর্ণ।


নোড.জেএস সহ

আপনি এখানে 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=');
}]);

কিন্তু কিভাবে?

আপনি যদি বেস 64 এবং সাধারণভাবে জাভাস্ক্রিপ্টে বিশেষত এনকোড করা হয় সে সম্পর্কে আরও জানতে চান তবে আমি এই নিবন্ধটি সুপারিশ করব: জাভাস্ক্রিপ্টে কম্পিউটার বিজ্ঞান: বেস64 এনকোডিং


1
অবগতির জন্য: ক্রস ব্রাউজার সংস্করণ সঙ্গে কিছু কদর্য তথ্য ফাঁসের হয়েছে c2এবং সম্ভবত c1এবং c3তাই এটি সাথে কাজ করবে না "use strict"উপরের হিসাবে সংজ্ঞায়িত।
ক্যাম্পবেলনে

41

এখানে স্নিপার পোস্টের একটি শক্ত সংস্করণ দেওয়া আছে। এটি কোনও গাড়িবহর রিটার্ন ছাড়াই ভালভাবে গঠিত বেস 64 স্ট্রিং ধরে রেখেছে। এই সংস্করণটি কয়েকটা লুপ &0xffমুছে ফেলে, ইয়ারোস্লাভ থেকে সংশোধন করে, পিছনের নালগুলি, এবং কিছুটা কোড গল্ফকে সরিয়ে দেয়।

decodeBase64 = function(s) {
    var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length;
    var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    for(i=0;i<64;i++){e[A.charAt(i)]=i;}
    for(x=0;x<L;x++){
        c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
        while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
    }
    return r;
};

5
আরও কম বাইটস; ডিdecodeBase64=function(f){var g={},b=65,d=0,a,c=0,h,e="",k=String.fromCharCode,l=f.length;for(a="";91>b;)a+=k(b++);a+=a.toLowerCase()+"0123456789+/";for(b=0;64>b;b++)g[a.charAt(b)]=b;for(a=0;a<l;a++)for(b=g[f.charAt(a)],d=(d<<6)+b,c+=6;8<=c;)((h=d>>>(c-=8)&255)||a<l-2)&&(e+=k(h));return e};
ডের হচস্টাপলার

হ্যাঁ তবে কেবল এএসসিআইআইয়ের সাথে কাজ করে। সিআর চরিত্রগুলি উদাহরণস্বরূপ ম্যাঙ্গেল হয়ে যায়।
মার্টিন কোভাচেভ

@ মার্টিনকোভাচেভ আপনি সাইর চরগুলি এবং সংশ্লিষ্ট বেস 64 এনকোডিং সহ উদাহরণ পাঠ্য সহ একটি নতুন মন্তব্য পোস্ট করতে পারেন? হতে পারে আমরা সংযুক্ত করার জন্য কোডটি ঠিক করতে পারি।
broc.seib

এখানে: এর মতো কিছু: тестова фраза
মার্টিন

2
@ অলিভারসালজবুর্গ এর চেয়েও কম কোড সারণী তৈরি করুন :):var g={},k=String.fromCharCode,i;for(i=0;i<64;)g[k(i>61?(i&1)*4|43:i+[65,71,-4][i/26&3])]=i++;
মাইক

34

সংক্ষিপ্ত এবং দ্রুত বেস 64 জাভাস্ক্রিপ্ট ডিকোড ফাংশন ব্যর্থতা ছাড়াই:

function decode_base64 (s)
{
    var e = {}, i, k, v = [], r = '', w = String.fromCharCode;
    var n = [[65, 91], [97, 123], [48, 58], [43, 44], [47, 48]];

    for (z in n)
    {
        for (i = n[z][0]; i < n[z][1]; i++)
        {
            v.push(w(i));
        }
    }
    for (i = 0; i < 64; i++)
    {
        e[v[i]] = i;
    }

    for (i = 0; i < s.length; i+=72)
    {
        var b = 0, c, x, l = 0, o = s.substring(i, i+72);
        for (x = 0; x < o.length; x++)
        {
            c = e[o.charAt(x)];
            b = (b << 6) + c;
            l += 6;
            while (l >= 8)
            {
                r += w((b >>> (l -= 8)) % 256);
            }
         }
    }
    return r;
}

6
অপেরা 11.62 '% 256' অংশ নিয়ে সমস্যা বলে মনে হচ্ছে। এটিকে '& 0xff' দিয়ে প্রতিস্থাপন করা কার্যকর হয়।
ইয়ারোস্লাভ স্টাভিনিচি

Tyk ভার্চুয়াল শেষ পয়েন্ট জাভাস্ক্রিপ্ট কোড '\ x00' অংশ নিয়ে সমস্যা বলে মনে হচ্ছে। এটিকে আর = আরআরলেস (/ \ x00 / জি, '') দিয়ে প্রতিস্থাপন করা এটিকে কাজ করে
তোলে


11

Php.js প্রকল্পের পিএইচপি এর ফাংশন অনেক জাভাস্ক্রিপ্ট বাস্তবায়নের হয়েছে। base64_encodeএবং base64_decodeঅন্তর্ভুক্ত করা হয়।


php.js হ'ল সমস্ত অশুভের অবতার এবং এটি নরকের নিজস্ব স্তরের অন্তর্গত। প্লেগের মতো এড়িয়ে চলুন। (আরও তথ্য: সফ্টওয়্যারেনজেনারিং.স্ট্যাকেকেক্সচেঞ্জ
সেকশনস

আমি এই লিঙ্কটিতে কম্বল দৃser় সমর্থন করে খুব বেশি দেখতে পাচ্ছি না, @ কোরিয়াস। ন্যায়বিচারের সাথে, বা একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করা, এটি পিএইচপি-তে কীভাবে করবেন তা আপনি ইতিমধ্যে জেনে থাকতে পারেন এমন কিছুটির জন্য জেএসের সমতুল্য যুক্তি খুঁজে বের করার এক পুরোপুরি গ্রহণযোগ্য উপায়।
সিজেজোজ

8

কেউ কি কোড গল্ফ বলেছেন? =)

সময়ের সাথে তাল মিলিয়ে আমার প্রতিবন্ধকতার উন্নতি করার চেষ্টাটি নিম্নলিখিত। আপনার সুবিধার জন্য সরবরাহ করা।

function decode_base64(s) {
  var b=l=0, r='',
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  s.split('').forEach(function (v) {
    b=(b<<6)+m.indexOf(v); l+=6;
    if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
  });
  return r;
}

আমি আসলে যা ছিল তার পরে একটি অ্যাসিনক্রোনাস বাস্তবায়ন এবং আমার আশ্চর্যজনকভাবে এটি forEachজিকুয়েরির $([]).eachপদ্ধতির প্রয়োগের বিপরীতে পরিণত হয়েছিল খুব সংক্রামক।

আপনার যদি এইরকম ক্রেজি ধারণাও মনে থাকে তবে 0 দেরি window.setTimeoutবেস 64 dec ode ode ode ode ode ode ode ode yn yn yn yn yn the the yn yn result result result

function decode_base64_async(s, cb) {
  setTimeout(function () { cb(decode_base64(s)); }, 0);
}

@ টুথব্রাশ "অ্যারের মতো একটি স্ট্রিং সূচীকরণ" করার পরামর্শ দিয়েছিলেন এবং এর থেকে মুক্তি পান split। এই রুটিনটি সত্যিই অদ্ভুত বলে মনে হচ্ছে এবং এটি কতটা সামঞ্জস্যপূর্ণ তা নিশ্চিত নয় তবে এটি অন্য বার্ডিকে আঘাত করে তাই এটি করা যাক।

function decode_base64(s) {
  var b=l=0, r='',
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  [].forEach.call(s, function (v) {
    b=(b<<6)+m.indexOf(v); l+=6;
    if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
  });
  return r;
}

জাভাস্ক্রিপ্ট স্ট্রিংয়ের আরও তথ্য সন্ধান করার সময় অ্যারের হিসাবে আমি এই প্রো /./gটিপটিতে হোঁচট খেয়েছি একটি স্ট্রিংয়ের মধ্য দিয়ে যাওয়ার জন্য একটি রেইজেক্স ব্যবহার করে । এটি স্ট্রিংটি জায়গায় রেখে প্রতিস্থাপনের পরিবর্তনশীল রাখার প্রয়োজনীয়তা বাদ দিয়ে কোডের আকারকে আরও হ্রাস করে।

function decode_base64(s) {
  var b=l=0,
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  return s.replace(/./g, function (v) {
    b=(b<<6)+m.indexOf(v); l+=6;
    return l<8?'':String.fromCharCode((b>>>(l-=8))&0xff);
  });
}

তবে আপনি যদি খানিকটা traditionalতিহ্যবাহী কিছু খুঁজছিলেন তবে নিম্নলিখিতটি আপনার স্বাদে আরও বেশি।

function decode_base64(s) {
  var b=l=0, r='', s=s.split(''), i,
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  for (i in s) {
    b=(b<<6)+m.indexOf(s[i]); l+=6;
    if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
  }
  return r;
}

আমার পিছনে নাল ইস্যুটি ছিল না তাই এটি সমপরিমাণ থাকার জন্য অপসারণ করা হয়েছিল তবে এটি সহজেই একটি trim()বা একটি দিয়ে সমাধান করা উচিতtrimRight() যদি আপনার পছন্দ হয় উচিত, যদি এটি আপনার জন্য সমস্যা তৈরি করে।

অর্থাত।

return r.trimRight();

বিঃদ্রঃ:

ফলাফলটি একটি এসকিআই বাইট স্ট্রিং, আপনার যদি ইউনিকোডের দরকার হয় escapeতবে বাইট স্ট্রিংয়ে সবচেয়ে সহজ হ'ল decodeURIComponentইউনিকোড স্ট্রিং উত্পাদন করতে ডিকোড করা যায়।

function decode_base64_usc(s) {      
  return decodeURIComponent(escape(decode_base64(s)));
}

যেহেতু escapeঅবহেলিত করা হচ্ছে আমরা প্রয়োজন ছাড়াই সরাসরি ইউনিকোড সমর্থন করার জন্য আমাদের ফাংশনটি পরিবর্তন করতে পারি escapeবা String.fromCharCodeআমরা %ইউআরআই ডিকোডিংয়ের জন্য প্রস্তুত একটি পালানো স্ট্রিং উত্পাদন করতে পারি ।

function decode_base64(s) {
  var b=l=0,
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  return decodeURIComponent(s.replace(/./g, function (v) {
    b=(b<<6)+m.indexOf(v); l+=6;
    return l<8?'':'%'+(0x100+((b>>>(l-=8))&0xff)).toString(16).slice(-2);
  }));
}

nJoy!


3
আপনার splitস্ট্রিংয়ের দরকার নেই , যেহেতু আপনি একটি অ্যারের মতো জাভাস্ক্রিপ্ট স্ট্রিংটি সূচক করতে পারেন। s.split('').forEach(function ...দ্বারা প্রতিস্থাপন করা যেতে পারে [].forEach.call(s, function ...। এটি স্ট্রিংকে বিভক্ত না করার কারণে এটি আরও দ্রুত হওয়া উচিত।
টুথব্রাশ

"আরও বেশি traditionalতিহ্যবাহী" আমার জন্য সম্পূর্ণরূপে ভেঙে গিয়েছিল - ছড়িয়ে ছিটিয়ে থাকা মূল পাঠ্যের চিহ্ন সহ একটি গার্ফড গণ্ডগোল তৈরি করেছিল। ক্রোমে
স্টিভ বেনেট

@ স্টিভ বেনেট আমি ক্রোমে সমস্ত রূপ পরীক্ষা করে দেখেছি ... এটি কার্যকর। আপনি ব্যাস 64 স্ট্রিংয়ের একটি উদাহরণ প্রদান করতে পারেন যা ব্যর্থ হয়?
নিকেল-

তিন বছর পরে? হা। আমার কী দরকার ছিল তা মনে নেই।
স্টিভ বেনিেট

6

আমি phpjs.org এ জাভাস্ক্রিপ্টের রুটিনগুলি চেষ্টা করেছি এবং তারা ভাল কাজ করেছে।

আমি প্রথম রানহিরু কুরাই দ্বারা নির্বাচিত উত্তরে প্রস্তাবিত রুটিনগুলি চেষ্টা করেছিলাম - http://ntt.cc/2008/01/19/base64-encoder-decoder-with- জাভাস্ক্রিপ্ট html

আমি খুঁজে পেয়েছি যে তারা সব পরিস্থিতিতে কাজ করে না। আমি একটি পরীক্ষার কেস লিখেছিলাম যেখানে এই রুটিনগুলি ব্যর্থ হয় এবং এগুলিকে এখানে গিটহাবে পোস্ট করে:

https://github.com/scottcarter/base64_javascript_test_data.git

লেখককে সতর্ক করার জন্য আমি এনটিটিসি তে ব্লগ পোস্টে একটি মন্তব্যও পোস্ট করেছি (সংযমের অপেক্ষায় - নিবন্ধটি পুরানো তাই মন্তব্যটি পোস্ট হবে কিনা তা নিশ্চিত নয়)।


1

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


1

নোড.জেজে আমরা এটি সহজ উপায়ে করতে পারি

var base64 = 'SGVsbG8gV29ybGQ='
var base64_decode = new Buffer(base64, 'base64').toString('ascii');

console.log(base64_decode); // "Hello World"

0

জাভা স্ক্রিপ্টস ফ্রেমওয়ার্কের জন্য যেখানে নেই atob পদ্ধতি নেই এবং আপনি যদি বাহ্যিক লাইব্রেরিগুলি আমদানি করতে না চান তবে এটি সংক্ষিপ্ত ফাংশন যা এটি করে।

এটিতে একটি স্ট্রিং আসবে যা বেস64 64 এনকোডড মান সহ এবং বাইটগুলির একটি ডিকোডেড অ্যারে ফিরিয়ে দেবে (যেখানে বাইটের অ্যারে সংখ্যার অ্যারে হিসাবে প্রতিনিধিত্ব করা হয় যেখানে প্রতিটি সংখ্যা 0 এবং 255 সহ অন্তর্ভুক্ত)।

function fromBase64String(str) {
    var alpha = 
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var value = [];
    var index = 0;
    var destIndex  = 0;
    var padding = false;
    while (true) {

        var first  = getNextChr(str, index, padding, alpha);
        var second = getNextChr(str, first .nextIndex, first .padding, alpha);
        var third  = getNextChr(str, second.nextIndex, second.padding, alpha);
        var fourth = getNextChr(str, third .nextIndex, third .padding, alpha);

        index = fourth.nextIndex;
        padding = fourth.padding;

        // ffffffss sssstttt ttffffff
        var base64_first  = first.code  == null ? 0 : first.code;
        var base64_second = second.code == null ? 0 : second.code;
        var base64_third  = third.code  == null ? 0 : third.code;
        var base64_fourth = fourth.code == null ? 0 : fourth.code;

        var a = (( base64_first << 2) & 0xFC ) | ((base64_second>>4) & 0x03);
        var b = (( base64_second<< 4) & 0xF0 ) | ((base64_third >>2) & 0x0F);
        var c = (( base64_third << 6) & 0xC0 ) | ((base64_fourth>>0) & 0x3F);

        value [destIndex++] = a;
        if (!third.padding) {
            value [destIndex++] = b;
        } else {
            break;
        }
        if (!fourth.padding) {
            value [destIndex++] = c;
        } else {
            break;
        }
        if (index >= str.length) {
            break;
        }
    }
    return value;
}

function getNextChr(str, index, equalSignReceived, alpha) {
    var chr = null;
    var code = 0;
    var padding = equalSignReceived;
    while (index < str.length) {
        chr = str.charAt(index);
        if (chr == " " || chr == "\r" || chr == "\n" || chr == "\t") {
            index++;
            continue;
        }
        if (chr == "=") {
            padding = true;
        } else {
            if (equalSignReceived) {
                throw new Error("Invalid Base64 Endcoding character \"" 
                    + chr + "\" with code " + str.charCodeAt(index) 
                    + " on position " + index 
                    + " received afer an equal sign (=) padding "
                    + "character has already been received. "
                    + "The equal sign padding character is the only "
                    + "possible padding character at the end.");
            }
            code = alpha.indexOf(chr);
            if (code == -1) {
                throw new Error("Invalid Base64 Encoding character \"" 
                    + chr + "\" with code " + str.charCodeAt(index) 
                    + " on position " + index + ".");
            }
        }
        break;
    }
    return { character: chr, code: code, padding: padding, nextIndex: ++index};
}

সংস্থানসমূহ ব্যবহৃত: আরএফসি -44548 ধারা 4

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