首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脚本base64对javascript base64解码

脚本base64对javascript base64解码
EN

Stack Overflow用户
提问于 2022-03-23 10:42:18
回答 1查看 197关注 0票数 2

请帮助使用GoogleApps脚本库64解码

- Google脚本

代码语言:javascript
复制
  var tmp_base64 = "EXezAAA=";
  var byte_base64 = Utilities.base64Decode(tmp_base64);

  return ContentService.createTextOutput('\''+ tmp_base64 + '\' => \''+byte_base64 +'\'' );

返回:'EXezAAA=‘=> '17,119,-77,0,0’

- javascript

代码语言:javascript
复制
function _base64ToArrayBuffer(base64) {
    var binary_string = window.atob(base64);
    var len = binary_string.length;
    var bytes = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        bytes[i] = binary_string.charCodeAt(i);
    }
    return bytes;
}
_base64ToArrayBuffer('EXezAAA=');

返回: Uint8Array(5) 17,119,179,0,0

正确转换了javascript,但是为什么Google脚本会转换成错误的字节呢?

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-23 12:18:28

当看到"Uint8Array“的文档时,如下所示。参考

Uint8Array类型数组表示由8位无符号整数组成的数组.

这样,您的_base64ToArrayBuffer将返回[17, 119, 179, 0, 0]

另一方面,在Google脚本中,字节数组默认使用“双补码8位有符号整数”。这样,Utilities.base64Decode("EXezAAA=")返回[17, 119, -77, 0, 0]

这就是你目前处境的原因。

例如,当您想在Javascript中检索相同的值时,请按以下方式修改它。

发自:

代码语言:javascript
复制
var bytes = new Uint8Array(len);

至:

代码语言:javascript
复制
var bytes = new Int8Array(len);

这样,您的_base64ToArrayBuffer将返回[17, 119, -77, 0, 0]

当您想在Google脚本中检索[17, 119, 179, 0, 0]的值时,请按以下方式修改它。

发自:

代码语言:javascript
复制
var byte_base64 = Utilities.base64Decode(tmp_base64);

至:

代码语言:javascript
复制
var byte_base64 = [...Uint8Array.from(Utilities.base64Decode(tmp_base64))];

这样,您的_base64ToArrayBuffer将返回[17, 119, 179, 0, 0]

参考文献:

代码语言:javascript
复制
- When the document of "Int8Array" is seen, it says as follows. [Ref](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array)

Int8Array类型化数组表示一个双补码8位有符号整数的数组.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71585775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档