来自 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 )
};
我有一个使用 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 )
};