将arraybuffer转换为字符串:超出最大调用堆栈大小

Sur*_*tta 8 javascript jquery encoding data-conversion arraybuffer

这是我的代码行.

        var xhr = new XMLHttpRequest();
        xhr.open('GET',window.location.href, true);
        xhr.responseType = "arraybuffer";
        xhr.onload = function(event) {
         debugger;
         console.log(" coverting array buffer to string "); 
         alert(String.fromCharCode.apply(null, new Uint8Array(this.response)));
        };
        xhr.send();
Run Code Online (Sandbox Code Playgroud)

该请求正在制作一个大约3 MB的pdf网址.阅读几个相同错误的线程,告诉必须有一些递归调用,但我没有看到任何递归调用.有帮助吗?

Ant*_* O. 13

我遇到了同样的问题,我终于使用了这个代码

function _arrayBufferToBase64( buffer ) {
    var binary = '';
    var bytes = new Uint8Array( buffer );
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
    return window.btoa( binary );
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。奇迹般有效 (2认同)

le_*_*e_m 9

该错误是由函数参数数量的限制引起的.请参阅"RangeError:超出最大调用堆栈大小"为什么?

而不是String.fromCharCode.apply()使用例如a TextEncoder.请参阅Jint中的Uint8Array字符串

  • 我打开了一个单独的[问题](/sf/ask/3438625571/) (2认同)

小智 6

this.response.arrayBuffer()
              .then((buf) => {
                const uint8Array = new Uint8Array(buf);
                const data = uint8Array.reduce((acc, i) => acc += String.fromCharCode.apply(null, [i]), '');
                return data;
              })
Run Code Online (Sandbox Code Playgroud)