首页 前端知识 【JS】实现 Base64 编码和解码(及中文乱码问题)

【JS】实现 Base64 编码和解码(及中文乱码问题)

2024-06-24 23:06:48 前端知识 前端哥 1091 557 我要收藏

文章目录

    • 一、原生实现
    • 二、插件实现

一、原生实现

  • JavaScript 定义了两个与 Base64 相关的全局方法。
1. btoa():字符串或二进制值转为 Base64 编码。
2. atob():把 Base64 编码转为原来的字符。
复制
  • 遇到中文编码需要先做一次 URI 组件编码或对解码后的内容进行 URI 解码
1. encodeURIComponent():结合 btoa 使用
2. decodeURIComponent():结合 atob 使用
复制
  • 示例:Base64 编码
// btoa() 相当于 window.btoa(),encodeURIComponent 同理
const str = 'test'
const encode = btoa(encodeURIComponent(str))
console.log(encode) // dGVzdA==
复制
  • 示例:Base64 解码
// atob() 相当于 window.atob(),decodeURIComponent 同理
const str = 'dGVzdA=='
const decode = decodeURIComponent(atob(str))
console.log(decode) // test
复制
  • 中文乱码处理方法:
const Base64 = {
encode(str) {
// 首先,我们使用 encodeURIComponent 来获得百分比编码的UTF-8,然后我们将百分比编码转换为原始字节,最后存储到btoa里面
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
function toSolidBytes(match, p1) {
return String.fromCharCode(Number('0x' + p1));
}));
},
decode(str) {
// 过程:从字节流到百分比编码,再到原始字符串
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); // "一颗不甘坠落的流星"
复制

二、插件实现

  • 按照 Base64 插件:编解码:js-base64,判断是否是Base64编码格式:is-base64
npm i js-base64
npm i is-base64
复制
  • 插件使用
import isBase64 from 'is-base64';
import { Base64 } from 'js-base64';
// 封装解码函数
const base64ToStr = (base64Str: string): string => {
if (isBase64(base64Str)) {
return Base64.decode(base64Str);
}
return base64Str;
};
// 封装编码函数
export const strToBase64 = (str: string): string => Base64.encode(str);
console.log(strToBase64('一颗不甘坠落的流星')) // 5LiA6aKX5LiN55SY5Z2g6JC955qE5rWB5pif
console.log(base64ToStr('5LiA6aKX5LiN55SY5Z2g6JC955qE5rWB5pif')) // 一颗不甘坠落的流星
复制
转载请注明出处或者链接地址:https://www.qianduange.cn//article/13487.html
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!