当前位置:首页 > JavaScript

btoa js实现

2026-04-07 04:23:46JavaScript

Btoa 的 JavaScript 实现

btoa 是 JavaScript 中的一个内置函数,用于将二进制数据(通常是字符串)编码为 Base64 格式。以下是关于 btoa 的实现和使用方法:

基本用法

btoa 函数接受一个字符串作为参数,并返回该字符串的 Base64 编码结果。

btoa js实现

const encodedData = btoa('Hello, world!');
console.log(encodedData); // "SGVsbG8sIHdvcmxkIQ=="

处理 Unicode 字符

btoa 只能正确处理 ASCII 字符。如果字符串包含 Unicode 字符(如中文、表情符号等),需要先进行转码。

function utf8ToBase64(str) {
  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {
    return String.fromCharCode(parseInt(p1, 16));
  }));
}

const encodedUnicode = utf8ToBase64('你好,世界!');
console.log(encodedUnicode); // "5L2g5aW977yM5LiW55WMhQ=="

解码 Base64

使用 atob 函数可以将 Base64 字符串解码为原始字符串。

btoa js实现

const decodedData = atob('SGVsbG8sIHdvcmxkIQ==');
console.log(decodedData); // "Hello, world!"

处理 Unicode 解码

如果 Base64 字符串包含 Unicode 字符,解码时需要额外处理。

function base64ToUtf8(str) {
  return decodeURIComponent(Array.prototype.map.call(atob(str), (c) => {
    return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  }).join(''));
}

const decodedUnicode = base64ToUtf8('5L2g5aW977yM5LiW55WMhQ==');
console.log(decodedUnicode); // "你好,世界!"

注意事项

  • btoaatob 是浏览器环境的内置函数,Node.js 中需要使用 Buffer 替代。
  • 非 ASCII 字符需要额外转码处理,否则会抛出错误。
  • Base64 编码会增加数据体积(约 33%),不适合编码大量数据。

Node.js 中的替代方案

在 Node.js 中,可以使用 Buffer 实现类似功能:

const encodedData = Buffer.from('Hello, world!').toString('base64');
console.log(encodedData); // "SGVsbG8sIHdvcmxkIQ=="

const decodedData = Buffer.from('SGVsbG8sIHdvcmxkIQ==', 'base64').toString();
console.log(decodedData); // "Hello, world!"

标签: btoajs
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…