读取包含大于128的ascii代码的文件,结果是错误的

时间:2018-04-15 02:54:11

标签: typescript ionic2 blob binaryfiles

我需要读取名为" a.bin"的二进制文件。逐个字节,存储在/ src / assets目录中(我使用ionic2编写一个App,我需要从目录中读取一些数据),我尝试了一些方法如下,但如果文件" a.bin& #34;包含大于128的ascii代码,我发现我得到的字节多于包含的文件,并且该值与文件包含的值不同。 以下是源代码:

public getFile()
  {
    this.getFileDataArray("a.bin").then((arr_buf)=>
    {
      console.log("the blob size is:"+arr_buf.size);
      var reader = new FileReader();
      reader.onloadend = function ()
      {
        let blob=new Uint8Array(reader.result);
        for (let a=0;a<blob.byteLength;a++)
        console.log("---------no:"+a+"--value:"+blob[a]);
      }
      reader.readAsArrayBuffer(arr_buf);
    }
  }

  public getFileDataArray(filename:string):Promise<Blob>
  {
    return new Promise((resolve, reject) =>
    {
      this.http.get('assets/'+filename)
      .subscribe(res =>
        {
          resolve(new Blob([res['_body']],{type: "application/octet-stream" }));
        });
    });
  }

这是a.bin的原始内容

enter image description here

但是当我读取第34个字节时,结果开始出错,我认为应用程序将字节更改为unicode。我怎样才能得到正确的结果? 顺便说一句,即使将getFileDataArray改为下面(返回Promise或Promise),我仍然无法得到正确的结果。

  public getFileDataArray(filename:string):Promise<text>
  {
    return new Promise((resolve, reject) =>
    {
      this.http.get('assets/'+filename)
      .subscribe(res =>
        {
          resolve(res.text());
        });
    });
  }

---------承诺---仍然不正确----------------- 我

2 个答案:

答案 0 :(得分:0)

我怀疑这里有一个字符编码问题,但由于我不确定哪个版本的Angular带有“ionic-angular 3.9.2”,所以我不知道这是否与http匹配你正在使用的客户。这至少值得一试:

this.http.get('assets/' + filename, {responseType: 'arraybuffer'})

答案 1 :(得分:0)

经过一段时间后,我得到了答案!

  public getFileData(filename:string):Observable<Blob>
  {
    return this.http.get('assets/'+filename, {responseType: ResponseContentType.Blob})
    .map(response => (response).blob());
  }