請幫助 GoogleApps Script Base 64 解碼
-- Google Apps 腳本
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 Apps 腳本會轉換為錯誤的位元組?
如何解決這個問題呢 ?
uj5u.com熱心網友回復:
當看到“Uint8Array”的檔案時,它說如下。參考
Uint8Array 型別陣串列示一個 8 位無符號整數陣列。
這樣,您的_base64ToArrayBuffer回報[17, 119, 179, 0, 0]。
另一方面,在 Google Apps Script 中,位元組陣列使用“二進制補碼 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]。
當您想檢索[17, 119, 179, 0, 0]at Google Apps Script 的值時,請進行如下修改。
從:
var byte_base64 = Utilities.base64Decode(tmp_base64);
到:
var byte_base64 = [...Uint8Array.from(Utilities.base64Decode(tmp_base64))];
這樣,您的_base64ToArrayBuffer回報[17, 119, 179, 0, 0]。
參考:
Uint8Array
整數8陣列
- 當看到“Int8Array”的檔案時,它說如下。參考
The Int8Array typed array represents an array of twos-complement 8-bit signed integers.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/447618.html
上一篇:取消嵌套嵌套的JSON物件
