javascript - 为什么 window.btoa 不能处理 Javascript 中的字符?

标签 javascript

所以我正在将字符串转换为 BASE64,如下面的代码所示...

var str = "Hello World";
var enc = window.btoa(str);

这会产生 SGVsbG8gV29ybGQ=。但是,如果我添加这些字符 – ” 如下所示,转换不会发生。这背后的原因是什么?非常感谢。

var str = "Hello – World”";
var enc = window.btoa(str);

最佳答案

btoait requires 中的奇异函数一个"Binary String" ,这是一种 8 位干净的字符串格式。它不适用于 charcode 255 以上的 unicode 值,例如您的破折号和“花哨的”引号所使用的值。

您要么必须将您的字符串转换为符合单字节打包的新字符串(然后手动重构关联的 atob 的结果),要么您可以先对数据进行 uri 编码, 使其安全:

> var str = `Hello – World`;
> window.btoa(encodeURIComponent(str));
"SGVsbG8lMjAlRTIlODAlOTMlMjBXb3JsZA=="

然后解压的时候记得再次解码:

> var base64= "SGVsbG8lMjAlRTIlODAlOTMlMjBXb3JsZA==";
> decodeURIComponent(window.atob(base64));
"Hello – World"

关于javascript - 为什么 window.btoa 不能处理 Javascript 中的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63387813/

相关文章:

javascript - queryselector全部用法

javascript - Leaflet.PolylineMeasure 在新环境中不起作用

javascript - 强制折叠 Vuetify v-list-group 中的所有事件项目

javascript - 如何检测用于 WebGL 的专用或集成显卡?

javascript - 输入意外结束 - 在 Express/Node App 上 curl JSON

javascript - 如何从 DOM 中移除某个类的所有元素?

javascript - 将外部 JavaScript 文件包含到 jsp 文件中出现一些错误

javascript - 在 ionic 3 上的 ion-nav 上的 StatusBar

javascript - 使用键盘中的箭头键禁用 map 平移

javascript - 使用现有类将表 6 行转换为 2 行 3 列