请帮助使用GoogleApps脚本库64解码
- Google脚本
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
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脚本会转换成错误的字节呢?
如何解决这个问题?
发布于 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中检索相同的值时,请按以下方式修改它。
发自:
var bytes = new Uint8Array(len);至:
var bytes = new Int8Array(len);这样,您的_base64ToArrayBuffer将返回[17, 119, -77, 0, 0]。
当您想在Google脚本中检索[17, 119, 179, 0, 0]的值时,请按以下方式修改它。
发自:
var byte_base64 = Utilities.base64Decode(tmp_base64);至:
var byte_base64 = [...Uint8Array.from(Utilities.base64Decode(tmp_base64))];这样,您的_base64ToArrayBuffer将返回[17, 119, 179, 0, 0]。
参考文献:
- 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位有符号整数的数组.
https://stackoverflow.com/questions/71585775
复制相似问题