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

时间:2019-12-07 01:03:39

标签: javascript xmlhttprequest

我正在使用一个库进行HTTP调用,我知道它正在使用XMLHTTPRequest,但是我无法设置responseType且response始终是文本。

我需要将文本转换为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: 毛刺与代码示例https://successful-pepper.glitch.me/

1 个答案:

答案 0 :(得分:1)

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

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

一个简单的例子:

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

console.log(firstArray === secondArray); // prints: false

您可以尝试使用JSON.stringify()将两个ArrayBuffers都转换为JSON并比较这些值。然后,您将获得两个ArrayBuffers相同。

另一种测试两个ArrayBuffer是否相同的方法可以在这里找到:How to test for equality in ArrayBuffer, DataView, and TypedArray