Buffer.toString('binary') 添加 "new characters"
Buffer.toString('binary') adds "new characters"
我正在尝试 compress/decompress 这个文件:Sample of contents of sum (which can be downloaded The Canterbury Corpus).
当我使用 fs.readFile(path, callback)
读取它时,我收到一个缓冲区,我需要将此缓冲区转换为字符串以便压缩,之后,需要再次将其另存为文件。
问题是 Buffer.toString('binary')
似乎在修改内容。
如果我运行
console.log('original: ', sumBuffer)
let newBuffer = Buffer.from(sumBuffer.toString('binary'))
console.log('modified: ', newBuffer)
我明白了:
original: <Buffer 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 00 02 00 02 00 00 00 01 00 01 0b 98 00 00 00 34 00 00 91 50 00 00 00 00 00 34 00 20 00 05 00 28 00 1a ... >
modified: <Buffer 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 00 02 00 02 00 00 00 01 00 01 0b c2 98 00 00 00 34 00 00 c2 91 50 00 00 00 00 00 34 00 20 00 05 00 28 ... >
在第二个中,有一些c2
字符出现在之前没有的地方。
modified: <Buffer 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 00 02 00 02 00 00 00 01 00 01 0b >>c2<< 98 00 00 00 34 00 00 >>c2<< 91 50 00 00 00 00 00 34 00 20 00 05 00 28 ... >
为什么会这样?我怎样才能摆脱这个?
提前谢谢你。
Buffer.from
函数以字符串作为第一个参数接受第二个可选的 encoding
参数,默认为 utf8
所以,你的代码等同于
let newBuffer = Buffer.from(sumBuffer.toString('binary'), 'utf8');
因为 sumBuffer
显然是二进制的,所以你要做的是
let newBuffer = Buffer.from(sumBuffer.toString('binary'), 'binary');
注意,这与
相同
let newBuffer = Buffer.from(sumBuffer);
但是,正如您所指出的,"real code" 有点复杂 - 我只是觉得有必要指出它,以防出现一些麻木的情况并说 "but why don't you just ... " :p
我正在尝试 compress/decompress 这个文件:Sample of contents of sum (which can be downloaded The Canterbury Corpus).
当我使用 fs.readFile(path, callback)
读取它时,我收到一个缓冲区,我需要将此缓冲区转换为字符串以便压缩,之后,需要再次将其另存为文件。
问题是 Buffer.toString('binary')
似乎在修改内容。
如果我运行
console.log('original: ', sumBuffer)
let newBuffer = Buffer.from(sumBuffer.toString('binary'))
console.log('modified: ', newBuffer)
我明白了:
original: <Buffer 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 00 02 00 02 00 00 00 01 00 01 0b 98 00 00 00 34 00 00 91 50 00 00 00 00 00 34 00 20 00 05 00 28 00 1a ... >
modified: <Buffer 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 00 02 00 02 00 00 00 01 00 01 0b c2 98 00 00 00 34 00 00 c2 91 50 00 00 00 00 00 34 00 20 00 05 00 28 ... >
在第二个中,有一些c2
字符出现在之前没有的地方。
modified: <Buffer 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 00 02 00 02 00 00 00 01 00 01 0b >>c2<< 98 00 00 00 34 00 00 >>c2<< 91 50 00 00 00 00 00 34 00 20 00 05 00 28 ... >
为什么会这样?我怎样才能摆脱这个?
提前谢谢你。
Buffer.from
函数以字符串作为第一个参数接受第二个可选的 encoding
参数,默认为 utf8
所以,你的代码等同于
let newBuffer = Buffer.from(sumBuffer.toString('binary'), 'utf8');
因为 sumBuffer
显然是二进制的,所以你要做的是
let newBuffer = Buffer.from(sumBuffer.toString('binary'), 'binary');
注意,这与
相同let newBuffer = Buffer.from(sumBuffer);
但是,正如您所指出的,"real code" 有点复杂 - 我只是觉得有必要指出它,以防出现一些麻木的情况并说 "but why don't you just ... " :p