js Base64转码

本文介绍Base64编码的基本原理及其在JavaScript中的应用。详细讲述了如何处理包含非ASCII码字符的情况,并提供了一段封装好的JavaScript代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Base64是一种编码方法,可以将任意字符转成可打印字符。使用这种编码方法,主要不是为了加密,而是为了不出现特殊字符,简化程序的处理。

JavaScript原生提供两个Base64相关方法。

btoa(); //字符串或二进制值转为Base64编码
atob(); //Base64编码转为原始值

下面是一个对特殊字符串的处理

<script type="text/javascript">
    var str = "hello\World" //这个字符串包含“\”,斜杠是一个特殊字符
    var str1 = btoa(str); // 转成base64
    console.log(str1);   //aGVsbG9Xb3JsZA==
    var str2 = atob(str1); //把base64转为原始字符串
    console.log(str2);  //helloWorld
</script>



但是这来个方法也有一个缺陷,它们不适合非ASCII码的字符,否者会报如下的这个错误。

<script type="text/javascript">
    var str = "你好" 
    var str1 = btoa(str); 
    console.log(str1);  //Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range
</script>

要将非ASCII码字符转为Base64编码,必须中间插入一个转码环节,要配合使用以下这两个方法。

encodeURIComponent();
decodeURIComponent();


下面是示例:

<script type="text/javascript">
    var str = "你好";
    var encode = encodeURIComponent(str);
    var str1 = btoa(encode); 
    console.log(str1); //JUU0JUJEJUEwJUU1JUE1JUJE

    var decode = decodeURIComponent(atob(str1));
    console.log(decode); //你好
</script>

综合以上内容,下面我们把这四个函数做一个简单的分装,可以使我们在开发中更为方便引用。

<script type="text/javascript">
    var base64 = { //这是一个javaScript的对象

          encode(str){

            return  str == null ? null : btoa(encodeURIComponent(str));

          },

          decode(str){

              return str == null ? null : decodeURIComponent(atob(str));

          }

        };
        console.log(base64.encode('你好'));//JUU0JUJEJUEwJUU1JUE1JUJE
</script>

本文参考至阮一峰老师的javaScript教程,很值的大家学习的一个教程,连接:

http://javascript.ruanyifeng.com/grammar/string.html#toc6

### 如何在 JavaScript 中对 JSON 进行 Base64 转码 在 JavaScript 中,可以轻松实现 JSON 数据的 Base64 编码和解码操作。以下是详细的说明: #### 1. **JSON 的 Base64 编码** 为了将 JSON 对象转换为 Base64 字符串,首先需要将其序列化为字符串形式(通过 `JSON.stringify`),然后再对其进行 Base64 编码。 ```javascript function jsonToBase64(jsonObj) { const jsonString = JSON.stringify(jsonObj); // 将对象转换为字符串 const byteString = unescape(encodeURIComponent(jsonString)); // 处理特殊字符 const base64Encoded = btoa(byteString); // 使用内置函数进行 Base64 编码 return base64Encoded; } ``` 上述代码中,`btoa()` 是浏览器环境下的标准方法,用于执行 ASCII 到 Base64 的编码[^1]。 #### 2. **Base64 解码回 JSON** 要从 Base64 字符串还原成原始 JSON 对象,则需先对其解码再解析为 JSON 格式。 ```javascript function base64ToJson(base64Str) { try { const decodedBytes = atob(base64Str); // 执行 Base64 解码 const jsonString = decodeURIComponent(escape(decodedBytes)); // 反向处理特殊字符 const jsonObj = JSON.parse(jsonString); // 将字符串解析为 JSON 对象 return jsonObj; } catch (e) { console.error('Error during decoding:', e); throw new Error('Invalid Base64 input'); } } ``` 这里使用了 `atob()` 方法来完成 Base64 至 ASCII 的反向转换过程。 #### 示例运行 假设我们有如下 JSON 数据结构: ```json { "name": "Alice", "age": 30, "city": "New York" } ``` 可以通过以下方式调用上面定义的方法来进行编解码测试: ```javascript const jsonData = { name: 'Alice', age: 30, city: 'New York' }; // 编码部分 const encodedData = jsonToBase64(jsonData); console.log(encodedData); // 解码部分 const decodedData = base64ToJson(encodedData); console.log(decodedData); ``` 输出结果应显示原样恢复后的 JSON 对象。 #### 关于填充字符 "=" 当数据长度不是 3 的倍数时,在 Base64 编码过程中会自动补充 `"="` 或者 `"=="` 来保持一致性[^3]。这些额外的字符仅作为占位符存在,并不会影响实际的数据内容。 --- ### 注意事项 - 如果目标环境中未提供全局函数 `btoa` 和 `atob` (例如 Node.js 并不默认支持它们),则可能需要引入第三方库或者手动编写替代方案。 - 特殊情况下需要注意 URL 安全版本的 Base64 表达形式差异[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值