// 使用const base64 =newBase64Code()const str ='你好'const en = base64.enCode(str)const de = base64.deCode(en)
console.log(en,'base64编码')// 5L2g5aW9
console.log(de,'base64解码')// 你好
|| 中文也可以进行编码, 里面已经对数据UTF-8转码再base64编码
// base64函数functionBase64Code(){
// base64 character set, plus padding character (=)var b64 ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",// Regular expression to check formal correctness of base64 encoded strings
b64re =/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;// 转UTF-8格式编码 private method for UTF-8 encodingconstutf8Encode=function(str){
let string = str;
string = string.replace(/\r\n/g,'\n');let utfText ='';for(let n =0; n < string.length; n++){
const c = string.charCodeAt(n);if(c <128){
utfText += String.fromCharCode(c);}elseif((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;};// 解UTF-8格式编码 private method for UTF-8 decodingconstutf8Decode=function(utfText){
let string ='';let i =0;let c =0;let c2 =0;let c3 =0;while(i < utfText.length){
c = utfText.charCodeAt(i);if(c <128){
string += String.fromCharCode(c);
i++;}elseif((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;};// base64编码this.enCode=function(string){
string =utf8Encode(String(string));var bitmap, a, b, c,
result ="",
i =0,
rest = string.length %3;// To determine the final paddingfor(; i < string.length;){
if((a = string.charCodeAt(i++))>255||(b = string.charCodeAt(i++))>255||(c = string.charCodeAt(i++))>255)thrownewTypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
bitmap =(a <<16)|(b <<8)| c;
result += b64.charAt(bitmap >>18&63)+ b64.charAt(bitmap >>12&63)+
b64.charAt(bitmap >>6&63)+ b64.charAt(bitmap &63);}// If there's need of padding, replace the last 'A's with equal signsreturn rest ? result.slice(0, rest -3)+"===".substring(rest): result;};// base64解码this.deCode=function(string){
// atob can work with strings with whitespaces, even inside the encoded part,// but only \t, \n, \f, \r and ' ', which can be stripped.
string =String(string).replace(/[\t\n\f\r ]+/g,"");if(!b64re.test(string))thrownewTypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");// Adding the padding if missing, for semplicity
string +="==".slice(2-(string.length &3));var bitmap, result ="",
r1, r2, i =0;for(; i < string.length;){
bitmap = b64.indexOf(string.charAt(i++))<<18| b64.indexOf(string.charAt(i++))<<12|(r1 = b64.indexOf(string.charAt(i++)))<<6|(r2 = b64.indexOf(string.charAt(i++)));
result += r1 ===64? String.fromCharCode(bitmap >>16&255):
r2 ===64? String.fromCharCode(bitmap >>16&255, bitmap >>8&255):
String.fromCharCode(bitmap >>16&255, bitmap >>8&255, bitmap &255);}returnutf8Decode(result);};}