Google-App-Script base64 对比 javascript base64 解码
Google-App-Script base64 vs javascript base64 decode
请帮助 GoogleApps Script Base 64 解码
-- Google Apps 脚本
var tmp_base64 = "EXezAAA=";
var byte_base64 = Utilities.base64Decode(tmp_base64);
return ContentService.createTextOutput('\''+ tmp_base64 + '\' => \''+byte_base64 +'\'' );
return : '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=');
return : Uint8Array(5) [ 17, 119, 179, 0, 0 ]
正确转换javascript,
但为什么 Google Apps 脚本会转换为错误的字节?
如何解决这个问题?
看到“Uint8Array”的文档,是这样说的。 Ref
The Uint8Array typed array represents an array of 8-bit unsigned integers.
由此,你的 _base64ToArrayBuffer
returns [17, 119, 179, 0, 0]
.
另一方面,在 Google Apps 脚本中,字节数组默认使用“twos-complement 8 位有符号整数”。由此,Utilities.base64Decode("EXezAAA=")
returns [17, 119, -77, 0, 0]
.
这就是你目前情况的原因。
例如Javascript中要检索相同的值时,请修改如下
发件人:
var bytes = new Uint8Array(len);
收件人:
var bytes = new Int8Array(len);
由此,你的 _base64ToArrayBuffer
returns [17, 119, -77, 0, 0]
.
当你想在Google Apps Script中获取[17, 119, 179, 0, 0]
的值时,请修改如下。
发件人:
var byte_base64 = Utilities.base64Decode(tmp_base64);
收件人:
var byte_base64 = [...Uint8Array.from(Utilities.base64Decode(tmp_base64))];
由此,你的 _base64ToArrayBuffer
returns [17, 119, 179, 0, 0]
.
参考文献:
-
-
- 看到“Int8Array”的文档,是这样说的。 Ref
The Int8Array typed array represents an array of twos-complement 8-bit signed integers.
请帮助 GoogleApps Script Base 64 解码
-- Google Apps 脚本
var tmp_base64 = "EXezAAA=";
var byte_base64 = Utilities.base64Decode(tmp_base64);
return ContentService.createTextOutput('\''+ tmp_base64 + '\' => \''+byte_base64 +'\'' );
return : '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=');
return : Uint8Array(5) [ 17, 119, 179, 0, 0 ]
正确转换javascript, 但为什么 Google Apps 脚本会转换为错误的字节?
如何解决这个问题?
看到“Uint8Array”的文档,是这样说的。 Ref
The Uint8Array typed array represents an array of 8-bit unsigned integers.
由此,你的 _base64ToArrayBuffer
returns [17, 119, 179, 0, 0]
.
另一方面,在 Google Apps 脚本中,字节数组默认使用“twos-complement 8 位有符号整数”。由此,Utilities.base64Decode("EXezAAA=")
returns [17, 119, -77, 0, 0]
.
这就是你目前情况的原因。
例如Javascript中要检索相同的值时,请修改如下
发件人:
var bytes = new Uint8Array(len);
收件人:
var bytes = new Int8Array(len);
由此,你的 _base64ToArrayBuffer
returns [17, 119, -77, 0, 0]
.
当你想在Google Apps Script中获取[17, 119, 179, 0, 0]
的值时,请修改如下。
发件人:
var byte_base64 = Utilities.base64Decode(tmp_base64);
收件人:
var byte_base64 = [...Uint8Array.from(Utilities.base64Decode(tmp_base64))];
由此,你的 _base64ToArrayBuffer
returns [17, 119, 179, 0, 0]
.
参考文献:
-
- 看到“Int8Array”的文档,是这样说的。 Ref
The Int8Array typed array represents an array of twos-complement 8-bit signed integers.