Home > Blockchain >  Google-App-Script base64 vs javascript base64 decode
Google-App-Script base64 vs javascript base64 decode

Time:03-24

Please, help with GoogleApps Script Base 64 Decode

-- Google Apps Script

  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 ]

correctly converted javascript, but why does Google Apps Script convert to wrong bytes?

How to solve this problem ?

CodePudding user response:

When the document of "Uint8Array" is seen, it says as follows. Ref

The Uint8Array typed array represents an array of 8-bit unsigned integers.

By this, your _base64ToArrayBuffer returns [17, 119, 179, 0, 0].

On the other hand, at Google Apps Script, the byte array uses "twos-complement 8-bit signed integers" as the default. By this, Utilities.base64Decode("EXezAAA=") returns [17, 119, -77, 0, 0].

This is the reason for your current situation.

For example, when you want to retrieve the same value, in Javascript, please modify it as follows.

From:

var bytes = new Uint8Array(len);

To:

var bytes = new Int8Array(len);

By this, your _base64ToArrayBuffer returns [17, 119, -77, 0, 0].

When you want to retrieve the value of [17, 119, 179, 0, 0] at Google Apps Script, please modify it as follows.

From:

var byte_base64 = Utilities.base64Decode(tmp_base64);

To:

var byte_base64 = [...Uint8Array.from(Utilities.base64Decode(tmp_base64))];

By this, your _base64ToArrayBuffer returns [17, 119, 179, 0, 0].

References:

  • Uint8Array

  • Int8Array

    • When the document of "Int8Array" is seen, it says as follows. Ref

    The Int8Array typed array represents an array of twos-complement 8-bit signed integers.

  • Related