gpt4 book ai didi

javascript - readAsBinaryString() 无法正常工作

转载 作者:行者123 更新时间:2023-11-30 11:41:51 27 4
gpt4 key购买 nike

这是我的代码:

var reader = new FileReader();
reader.onload = function(e) {
download(reader.result, "Test.stl");
}
reader.readAsBinaryString(input_file_field.files[0]);

结果文件:

Result file

原始文件:

Original file

输出几乎相同,差异很小(这不是“下载”功能的问题,如果我将日志放入控制台也是一样的)。

对正在发生的事情有什么想法吗?


编辑:

这是我用于二进制转换的代码(两者都不起作用):

var reader = new FileReader();
reader.onload = function(e) {
var fileData = reader.result;
var bytes = new Uint8Array(fileData);
var binaryText = '';

for (var index = 0; index < bytes.byteLength; index++) {
binaryText += String.fromCharCode(bytes[index]);
}

download(binaryText, "Test.stl");
}
reader.readAsArrayBuffer(input_field.files[0]);

最佳答案

在将文件作为 ArrayBuffer 读取后,内容将采用二进制格式(作为原始字节数组)。

这一行:

binaryText += String.fromCharCode(bytes[index]);

然而,由于 ASCII 范围 (0-127) 之外的任何值都受制于 16 位 unicode 编码 (UTF-16/USC-2),并且原始字节最终可能会使用两个字符来表示,因此

可能会造成困惑源值。

例如,您可以看到第一个差异出现在位置 0x55、字节值 0xB3(十进制为 179)和 ASCII 范围之外的位置,变为 0xC2B3。下一个值 0xEF(十进制为 239)变为 0xC3AF,然后保留下一个 0x3E,因为它小于 128,依此类推。

但是,由于数据已经是二进制格式,因此没有充分理由执行此转换步骤。可以(并且应该)删除整个循环。

只需将一个 View 分配给 ArrayBuffer(就像您在转换步骤之前所做的那样)并使用它通过索引/位置读取数据。

如果您打算解析格式,我建议您使用 DataView 而不是 Uint8Array,因为文件倾向于定义可变宽度的数据字段,而 DataView 在这些情况下更加灵活和方便。

如果它是为了传输到服务器/商店以供下载,您可以简单地保留原始文件 blob 并按原样发送它(参见第一个 test fiddle)。

关于javascript - readAsBinaryString() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com