JS如何實(shí)現(xiàn)Base64編碼和解碼(及中文亂碼問(wèn)題)
一、原生實(shí)現(xiàn)
- JavaScript 定義了兩個(gè)與 Base64 相關(guān)的全局方法。
1. btoa():字符串或二進(jìn)制值轉(zhuǎn)為 Base64 編碼。
2. atob():把 Base64 編碼轉(zhuǎn)為原來(lái)的字符。
- 遇到中文編碼需要先做一次 URI 組件編碼或?qū)獯a后的內(nèi)容進(jìn)行 URI 解碼
1. encodeURIComponent():結(jié)合 btoa 使用
2. decodeURIComponent():結(jié)合 atob 使用
- 示例:Base64 編碼
// btoa() 相當(dāng)于 window.btoa(),encodeURIComponent 同理 const str = 'test' const encode = btoa(encodeURIComponent(str)) console.log(encode) // dGVzdA==
- 示例:Base64 解碼
// atob() 相當(dāng)于 window.atob(),decodeURIComponent 同理 const str = 'dGVzdA==' const decode = decodeURIComponent(atob(str)) console.log(decode) // test
- 中文亂碼處理方法:
const Base64 = {
encode(str) {
// 首先,我們使用 encodeURIComponent 來(lái)獲得百分比編碼的UTF-8,然后我們將百分比編碼轉(zhuǎn)換為原始字節(jié),最后存儲(chǔ)到btoa里面
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
function toSolidBytes(match, p1) {
return String.fromCharCode(Number('0x' + p1));
}));
},
decode(str) {
// 過(guò)程:從字節(jié)流到百分比編碼,再到原始字符串
return decodeURIComponent(atob(str).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
}
let encoded = Base64.encode("一顆不甘墜落的流星"); // "5LiA6aKX5LiN55SY5Z2g6JC955qE5rWB5pif"
let decoded = Base64.decode(encoded); // "一顆不甘墜落的流星"二、插件實(shí)現(xiàn)
- 按照 Base64 插件:編解碼:
js-base64,判斷是否是Base64編碼格式:is-base64
npm i js-base64 npm i is-base64
- 插件使用
import isBase64 from 'is-base64';
import { Base64 } from 'js-base64';
// 封裝解碼函數(shù)
const base64ToStr = (base64Str: string): string => {
if (isBase64(base64Str)) {
return Base64.decode(base64Str);
}
return base64Str;
};
// 封裝編碼函數(shù)
export const strToBase64 = (str: string): string => Base64.encode(str);
console.log(strToBase64('一顆不甘墜落的流星')) // 5LiA6aKX5LiN55SY5Z2g6JC955qE5rWB5pif
console.log(base64ToStr('5LiA6aKX5LiN55SY5Z2g6JC955qE5rWB5pif')) // 一顆不甘墜落的流星總結(jié)
到此這篇關(guān)于JS如何實(shí)現(xiàn)Base64編碼和解碼及中文亂碼問(wèn)題的文章就介紹到這了,更多相關(guān)JS Base64編碼和解碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jscript之List Excel Color Values
jscript之List Excel Color Values...2007-06-06
微信小程序利用canvas 繪制幸運(yùn)大轉(zhuǎn)盤功能
本文通過(guò)一段簡(jiǎn)單的實(shí)例代碼給大家介紹微信小程序利用canvas 繪制幸運(yùn)大轉(zhuǎn)盤,代碼很簡(jiǎn)單,感興趣的朋友跟隨腳本之家小編一起看看吧2018-07-07
當(dāng)鼠標(biāo)滑過(guò)文本框自動(dòng)選中輸入框內(nèi)容的JS代碼分享
這篇文章主要介紹了當(dāng)鼠標(biāo)滑過(guò)文本框自動(dòng)選中輸入框內(nèi)容的JS代碼,有需要的朋友可以參考一下2013-11-11
promise處理多個(gè)相互依賴的異步請(qǐng)求(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇promise處理多個(gè)相互依賴的異步請(qǐng)求(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
JavaScript實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式的一些技巧總結(jié)
單例模式是JavaScript項(xiàng)目中最常用的設(shè)計(jì)模式之一,下面羅列了JavaScript實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式的一些技巧總結(jié),包括惰性加載與分支技術(shù)等,需要的朋友可以參考下.2016-05-05

