来自 javascript 中文件的 UTF-16 字节数组?

UTF-16 byte array from file in javascript?

我有一个使用 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 进行任何转换,您只是将数值从 TypedArray 视图复制到普通数组(顺便说一句,这似乎毫无意义...)。

不确定你所说的 "byte array",但如果你想将此二进制数据作为 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 )
};