gpt4 book ai didi

javascript - Buffer.toString ('binary' ) 添加 "new characters"

转载 作者:行者123 更新时间:2023-12-03 01:02:36 27 4
gpt4 key购买 nike

我正在尝试压缩/解压缩此文件:Sample of contents of sum (可以下载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之前出现的 Angular 色什么都没有。

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);

但是,正如您所指出的,“真正的代码”要复杂一些 - 我只是觉得有必要指出它,以防一些 numty 出现并说“但是你为什么不...... ”:p

关于javascript - Buffer.toString ('binary' ) 添加 "new characters",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52564196/

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