Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中将文本转换为ArrayBuffer的类似ArrayBuffer的responseType_Javascript_Xmlhttprequest - Fatal编程技术网

如何在Javascript中将文本转换为ArrayBuffer的类似ArrayBuffer的responseType

如何在Javascript中将文本转换为ArrayBuffer的类似ArrayBuffer的responseType,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我正在使用一个库来进行HTTP调用,我知道它正在使用XMLHTTPRequest,但我无法设置responseType,并且响应总是文本 我需要将文本转换为ArrayBuffer,因为我使用了responseType:ArrayBuffer。我尝试了多次转换,但没有一次产生相同的缓冲区 更新:下面的代码就是将ArrayBuffer转换为字符串的代码 var dataView = new DataView(this.response); var decoder = new Text

我正在使用一个库来进行HTTP调用,我知道它正在使用XMLHTTPRequest,但我无法设置responseType,并且响应总是文本

我需要将文本转换为ArrayBuffer,因为我使用了responseType:ArrayBuffer。我尝试了多次转换,但没有一次产生相同的缓冲区

更新:下面的代码就是将ArrayBuffer转换为字符串的代码

    var dataView = new DataView(this.response);
    var decoder = new TextDecoder('utf8');
    var decodedString = decoder.decode(dataView);
我需要把这个倒过来

   var encodedr = new TextEncoder('utf8');              
   var encodedArray =encodedr.encode(req.body);
   var arrayBuffer = encodedArray.buffer;
不一样,差不多是两倍大

更新2:
代码示例出现故障

我在您发布的故障中看到的唯一问题是,您试图通过引用而不是通过值来比较2个ArrayBuffers

在JavaScript中,非原语值在内存中有一个引用。因此,在比较非原语值时,将比较它们在内存中的引用,而不是它们的值

一个简单的例子:

var firstArray = [1, 2, 3];
var secondArray = [1, 2, 3];

console.log(firstArray === secondArray); // prints: false
您可以尝试使用
JSON.stringify()
将两个ArrayBuffers转换为JSON并比较这些值。然后,您会发现两个ArrayBuffer是相同的


可以在此处找到另一种测试两个ArrayBuffer是否相同的方法:

您可以指定库名称吗?这可能会很有帮助,因为他们的文档显示,默认情况下,您可以使用responseType JSON或text,而无需其他选项。如果您无法更改库,我建议将在ArrayBuffer中收到的文本转换为文本(请参见此处的示例字符串转换为ArrayBuffer)。如果您已经尝试过,请提供您尝试过的内容,直到now@Lykos94我试过了,但并没有产生相同的缓冲区。@koolaang看起来第二部分中的
req.body
已经是ArrayBuffer了?尝试在不编码的情况下使用它,因为您的代码可以按预期工作,但是如果您正在编码类型为
ArrayBuffer
的内容,那么它将是双重大小是的,关于比较,您是对的,我想比较大小,我将更新它。但是一个6178243大小的ArrayBuffer怎么能和一个3406624大小的ArrayBuffer一样呢?事实并非如此。当我打开控制台时,我得到了
转换的Uint8Array Uint8Array(6178243)
我们将字符串转换为arrrayBuffer ArrayBuffer(6178243)
,大小相同。