NodeJS Buffer - 读取数据导致垃圾字符

时间:2017-05-18 15:10:11

标签: javascript node.js

我正在尝试从某些设备中读取某些数据,这些设备连接到我用NodeJS编写的套接字服务器。数据作为二进制流接收,我按照设备规范正确读取每个块。规范与此类似:

byte | size | type          | description
-------------------------------------------
   0 |    2 | unsigned int  | whatever...
   2 |    4 | unsigned int  | irrelevant...
   6 |  var | character str | etc...

当我收到这样的数据时,我正在使用特定的Buffer方法读取每个块,例如:

// example code
const tid = data.readUInt16BE(0);
const dataLength = data.readUInt32BE(2);
const rest = data.toString('utf8', 6);

我遇到的问题是读取这个可变长度的数据。我正在使用data.toString('utf8', 6)(未定义end因为我只需要其余的数据)但我的rest变量包含一些奇怪的字符,我怀疑这些字符是回车但在控制台中显示不同每次。例如:

// in each response here, everything before $ character is garbage
// 'clean' response should look like:
// OK
// $DATA=1234567890
// $DATA=0987654321
// etc...

// example code, 1st try
const rest = data.toString('utf8', 6);
console.log(rest);
// results in:
// OK
// ��$DATA=1234567890
// ��$DATA=0987654321
// etc...

// example code, 2nd try
const rest = data.toString('utf8', 6);
console.log(rest);
// results in:
// OK
// i�$DATA=1234567890
// i�$DATA=0987654321
// etc...

// example code, 3rd try
const rest = data.toString('utf8', 6);
console.log(rest);
// results in:
// OK
// UB$DATA=1234567890
// UB$DATA=0987654321
// etc...

// example code, 4th try
const rest = data.toString('utf8', 6);
console.log(rest);
// results in:
// OK
// � $DATA=1234567890
// � $DATA=0987654321
// etc...

// well, you get the point...

事情是每行的开头总是有2个字符,我无法弄清楚它们是什么以及它们为什么会出现。

正如我所说,我认为这是因为回车而发生的,所以我试图用不同的方式替换它:

const rest = data.toString('utf8', 6).replace('\r', '');
// or (makes no sense, but let's try anyways)
const rest = data.toString('utf8', 6).replace(/[\r]/g, '');
// or (hoped that this one will really work)
const rest = data.toString('utf8', 6).replace(/[\n\r]/g, '\n');
// etc...

但是,当然,我的尝试没有任何效果,垃圾字符总会出现。

我的问题是:如何找出这些字符以及我可以尝试删除它们的内容?

0 个答案:

没有答案