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

 更新时间:2023年10月12日 10:52:00   作者:一颗不甘坠落的流星  
这篇文章主要给大家介绍了关于JS如何实现Base64编码和解码及中文乱码问题的相关资料,Base64编码是一种常用的将二进制数据转换为文本数据的方式,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、原生实现

  • 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'))	// 一颗不甘坠落的流星

总结 

到此这篇关于JS如何实现Base64编码和解码及中文乱码问题的文章就介绍到这了,更多相关JS Base64编码和解码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redux中进行异步操作(网络请求)的示例方案

    Redux中进行异步操作(网络请求)的示例方案

    这篇文章主要介绍了Redux中进行异步操作(网络请求)的方案,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • zTree插件下拉树使用入门教程

    zTree插件下拉树使用入门教程

    这篇文章主要为大家详细介绍了zTree插件下拉树使用入门教程,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • js仿淘宝商品放大预览功能

    js仿淘宝商品放大预览功能

    本文主要介绍了js仿淘宝商品放大预览功能的实例。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • 基于ts的动态接口数据配置的详解

    基于ts的动态接口数据配置的详解

    这篇文章主要介绍了基于ts的动态接口数据配置的详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • js在Firefox与IE中对DOM对像的引用的比较

    js在Firefox与IE中对DOM对像的引用的比较

    直接用ID属性进行引用 直接用NAME属性进行引用 使用getElementById(),getElementsByName(),getElementsByTagName()进行引用
    2009-06-06
  • Layui 导航默认展开和菜单栏选中高亮设置的方法

    Layui 导航默认展开和菜单栏选中高亮设置的方法

    今天小编就为大家分享一篇Layui 导航默认展开和菜单栏选中高亮设置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 使用canvas进行图像编辑的实例

    使用canvas进行图像编辑的实例

    下面小编就为大家带来一篇使用canvas进行图像编辑的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • js实现跟随鼠标移动且带关闭功能的图片广告实例

    js实现跟随鼠标移动且带关闭功能的图片广告实例

    这篇文章主要介绍了js实现跟随鼠标移动且带关闭功能的图片广告,实例分析了javascript操作鼠标事件及html元素的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • JavaScript字符串对象

    JavaScript字符串对象

    这篇文章主要为大家详细介绍了JavaScript字符串对象,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • JS 简单实现拖拽评星的示例代码

    JS 简单实现拖拽评星的示例代码

    本文主要介绍了JS 简单实现拖拽评星,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论