0

介绍

大家好,我目前正在开发一个基于 JavaScript 的 3d 切片工具(SLAcer.js - btw.),它可以为我便宜的 dlp 打印机(SparkMaker)生成方便的打印文件。打印文件由一些 G 代码和简单的二进制层/图像组成(参见此处)。

我已经能够生成 G-Code 和包含二进制层相关信息的 Uint8Array。当前,所有 G 代码和二进制层都连接为字符串(可能是第一个问题),最后可以作为 zip 文件的一部分作为打印文件 (.wow) 下载。(项目默认 JSZip 框架)(见这里

我苦苦挣扎的地方是:

我无法为二进制层获得正确的 TextEncoding 以匹配原始二进制层。

var array = new Uint8Array(width*height/8);
var binary_layer;

已经尝试了几件事,包括:

binary_layer=(new TextDecoder("utf-8")).decode(array) /*with different text encodes*/

也试过:

binary_layer=bin2string(array)
function bin2string(array){
var result = "";
for(var i = 0; i < array.length; ++i){
result+= (String.fromCharCode(array[i]));
}
console.log(result);
return result;
}

令我惊讶的是,当将每个 Uint8Array 导出为单独的二进制 txt 文件时,它们几乎完全匹配所需/原始模式

级联:

file_contents = "[some gecode]";
file_contents += binary_layer;

概括

var staring = "hello";
var array = new Uint8Array(2);
array[0]=255;
array[1]=0;

想要的文件内容(文本和原始二进制文件 - utf8):

hello(xFF)(NUL)

这听起来很容易,但就正确的编码而言,它不是:

4

1 回答 1

0

问题可以修复(仍需要进一步测试)

可以通过使用{binary: true}选项保存所有数据并使用简单的十六进制到字符串解码器方法来解决问题:

function bin2string(array){
var result = "";
for(var i = 0; i < array.length; ++i){
result+= (String.fromCharCode(array[i]));
}
return result;
}

烦人(在我的情况下):

var array = new Uint8Array(2);
array[1]=255;
(new TextDecoder("utf-8")).decode(array)

是否输出:(NUL)(xFD)

但应该有输出:(NUL)(xFF)

这需要进一步讨论!(另见这里

于 2018-03-04T13:16:43.540 回答