Javascript readAsBinaryString()工作不正常

Javascript readAsBinaryString()工作不正常,javascript,filereader,Javascript,Filereader,这是我的代码: var reader = new FileReader(); reader.onload = function(e) { download(reader.result, "Test.stl"); } reader.readAsBinaryString(input_file_field.files[0]); 结果文件: 原始文件: 输出几乎相同,但差别不大(这不是“下载”功能的问题,如果我将日志放入控制台,也是一样的) 你知道发生了什么事吗 编辑: 这是我用于二进制

这是我的代码:

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

原始文件:

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

你知道发生了什么事吗


编辑:

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

var reader=newfilereader();
reader.onload=函数(e){
var fileData=reader.result;
var bytes=新的Uint8Array(fileData);
var binaryText='';
对于(变量索引=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,依此类推

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

只需向ArrayBuffer分配一个视图(就像在转换步骤之前所做的那样),并使用该视图通过index/position读取数据

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


如果是为了传输到服务器/商店下载,您只需保留原始文件blob并按原样发送即可(参见第一个)。

来自MDN的页面:注意,根据W3C 2012年7月12日的工作草案,此方法现在已被弃用。这个方法已经从FileAPI标准中删除了。应改为使用FileReader.readAsArrayBuffer()。。。。那么,也许是这样?文本编辑器中的
MIME
类型设置是什么?为什么不使用
.readAsText()
?使用
readAsText
会导致相同的结果:文件已损坏。我还尝试使用
readAsArrayBuffer
然后转换为Uint8Array,但我的输出与
readAsBinaryString
相同。您能为我们运行吗?加载STL文件,以正确的扩展名将其保存回磁盘,在十六进制查看器中进行比较,问题仍然存在吗?这是短路。@K3N我已更新。该代码正在工作-下载的文件与输入文件完全相同。
binaryText += String.fromCharCode(bytes[index]);