所以我正在将字符串转换为 BASE64,如下面的代码所示...
var str = "Hello World";
var enc = window.btoa(str);
这会产生 SGVsbG8gV29ybGQ=
。但是,如果我添加这些字符 – ”
如下所示,转换不会发生。这背后的原因是什么?非常感谢。
var str = "Hello – World”";
var enc = window.btoa(str);
最佳答案
btoa
是 it 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/