【问题标题】:UTF-16 byte array from file in javascript?javascript中文件的UTF-16字节数组?
【发布时间】:2019-11-20 21:32:32
【问题描述】:

我有一个使用 UTF-16 编码的文件,并且编码的字符串包含 à÷ 等字符。我用来读取文件的代码是:

  var reader = new FileReader();
  reader.readAsArrayBuffer(real_file_button.files[0]);
  reader.onloadend = function (evt) {
      if (evt.target.readyState == FileReader.DONE) {
         var arrayBuffer = evt.target.result,
             array = new Uint8Array(arrayBuffer);
         for (var i = 0; i < array.length; i++) {
             fileByteArray.push(array[i]);
          }
      }
  }

但由于它是以 UTF-8 格式读取的,à÷ 字符将转换为 。如何在保持正确编码的同时获取文件的字节数组?

【问题讨论】:

  • "但因为它是以 UTF-8 格式读取的" - 嗯,不是吗?它将文件读入字节的原始缓冲区,您显示的代码中没有字符串,也没有编码。你究竟在哪里输出任何字符?
  • 顺便说一句,fileByteArray 是什么,复制你已经拥有的 array 有什么意义?

标签: javascript utf-16


【解决方案1】:

这里没有对 UTF-8 进行任何转换,您只是将数值从 TypedArray 视图复制到普通数组(顺便说一句,这似乎毫无意义......)。

不确定您所说的“字节数组”是什么,但如果您想将此二进制数据作为 UTF-16 字符串读取,请使用 FileReader 的 readAsText( blob, encoding ) 方法:

const file = real_file_button.files[0];
reader.onload = (e) => doSomethingWith( reader.result );
reader.readAsText( file, "utf-16" )

这将默认为小端 utf-16。如果您需要大端,请使用"utf-16be"

如果您希望将 ArrayBuffer 视为 uint16 值,则创建一个 Uint16Array 视图:

reader.readAsArrayBuffer( file );
reader.onload = (e) => {
  const uint16view = new Uint16Array( reader.result );
  // doSomethingWith( uint16view )
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2019-08-16
    • 2020-07-17
    • 2018-06-18
    相关资源
    最近更新 更多