在JavaScript中将字符串转换为base64,不建议使用btoa和atob

brvekthn  于 2023-01-04  发布在  Java
关注(0)|答案(4)|浏览(2204)

我最近一直在用VS Code做一些项目,突然在我的代码中开始收到btoa和atob现在被弃用的通知。除了VS Code之外,我找不到任何相关的资源。如果这是真的,有什么替代方案?

new9mtju

new9mtju1#

Node btoa()和atob()函数是唯一被弃用的函数,但是,如果您正在处理DOM代码(前端)并看到这个弃用通知,您可以使用window对象来绕过它。

window.atob()

For more info

cx6n0qe3

cx6n0qe32#

btoa():接受一个字符串,其中每个字符代表一个8位字节。如果你传递的字符串包含不能用8位表示的字符,它可能会中断。这可能就是btoa被弃用的原因。
atob():返回一个字符串,其中每个字符代表一个8位字节。
如果您使用的是nodejs,只需将atob和btoa替换为Buffer. Here is the official documentation Buffers in nodejs

//With NodeJS

export const encodeBase64 = (data) => {
    return Buffer.from(data).toString('base64');
}
export const decodeBase64 = (data) => {
    return Buffer.from(data, 'base64').toString('ascii');
}

Node JS中的btoa和atob函数已经过时了。如果你是为浏览器编写代码,你只需要在窗口前面加上一个前缀就可以去掉这个过时标记。
编码:

window.btoa('test')

结果:dGVzdA==
解码

window.atob('dGVzdA==')

结果:测试
另外,您可以使用“yarn add buffer”或“npm i buffer”安装buffer,以便在浏览器上运行。buffer模块的API与节点的Buffer API相同。
下面是一个使用javascript模块到浏览器的React示例,但它可以在任何使用webpack或parcel甚至是带有script src的vanilla javascript的现代javascript前端应用上运行:

//this will run on browser    
import React from "react";
import { Buffer } from 'buffer';
export default function App() {

  const encodeBase64 = (data) => {
    return Buffer.from(data).toString('base64');
  }
  const decodeBase64 = (data) => {
    return Buffer.from(data, 'base64').toString('ascii');
  }

  return <div>
    {'encoded test to base64 = ' + encodeBase64('test')}<br />
    {'decoded dGVzdA== to ascII = ' + decodeBase64('dGVzdA==')}
  </div>;
}

上述React钩子将导致:

encoded test to base64 = dGVzdA==
decoded dGVzdA== to ascII = test
uujelgoq

uujelgoq3#

还是在VS代码中,我查看了btoa(str)函数的注解,它建议使用以下内容作为替代:

const base64Str = Buffer.from(str, 'utf8').toString('base64');
ecfdbz9o

ecfdbz9o4#

btoaatob仅在Node.js中被弃用。如果您在前面添加window.,您将摆脱此弃用标记。
另一方面,如果您尝试在后端使用btoaatob,则绝对应该使用Buffer接口。
参考文献:

  1. https://github.com/microsoft/TypeScript/issues/45566#issuecomment-905057883
  2. https://github.com/microsoft/TypeScript/issues/45566
  3. https://developer.mozilla.org/en-US/docs/Web/API/btoa(无弃用警告!)

相关问题