我最近一直在用VS Code做一些项目,突然在我的代码中开始收到btoa和atob现在被弃用的通知。除了VS Code之外,我找不到任何相关的资源。如果这是真的,有什么替代方案?
new9mtju1#
Node btoa()和atob()函数是唯一被弃用的函数,但是,如果您正在处理DOM代码(前端)并看到这个弃用通知,您可以使用window对象来绕过它。
window.atob()
For more info
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
uujelgoq3#
还是在VS代码中,我查看了btoa(str)函数的注解,它建议使用以下内容作为替代:
const base64Str = Buffer.from(str, 'utf8').toString('base64');
ecfdbz9o4#
btoa和atob仅在Node.js中被弃用。如果您在前面添加window.,您将摆脱此弃用标记。另一方面,如果您尝试在后端使用btoa或atob,则绝对应该使用Buffer接口。参考文献:
btoa
atob
window.
Buffer
4条答案
按热度按时间new9mtju1#
Node btoa()和atob()函数是唯一被弃用的函数,但是,如果您正在处理DOM代码(前端)并看到这个弃用通知,您可以使用window对象来绕过它。
For more info
cx6n0qe32#
btoa():接受一个字符串,其中每个字符代表一个8位字节。如果你传递的字符串包含不能用8位表示的字符,它可能会中断。这可能就是btoa被弃用的原因。
atob():返回一个字符串,其中每个字符代表一个8位字节。
如果您使用的是nodejs,只需将atob和btoa替换为Buffer. Here is the official documentation Buffers in nodejs:
Node JS中的btoa和atob函数已经过时了。如果你是为浏览器编写代码,你只需要在窗口前面加上一个前缀就可以去掉这个过时标记。
编码:
结果:dGVzdA==
解码
结果:测试
另外,您可以使用“yarn add buffer”或“npm i buffer”安装buffer,以便在浏览器上运行。buffer模块的API与节点的Buffer API相同。
下面是一个使用javascript模块到浏览器的React示例,但它可以在任何使用webpack或parcel甚至是带有script src的vanilla javascript的现代javascript前端应用上运行:
上述React钩子将导致:
uujelgoq3#
还是在VS代码中,我查看了btoa(str)函数的注解,它建议使用以下内容作为替代:
ecfdbz9o4#
btoa
和atob
仅在Node.js中被弃用。如果您在前面添加window.
,您将摆脱此弃用标记。另一方面,如果您尝试在后端使用
btoa
或atob
,则绝对应该使用Buffer
接口。参考文献: