代码之家  ›  专栏  ›  技术社区  ›  Renan Souza

toString('binary')添加“新字符”

  •  0
  • Renan Souza  · 技术社区  · 6 年前

    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)
    

    我明白了:

    原件:&书信电报;缓冲器7f 45 4c 46 01 02 01 00 00 00 00 00 00 02 00 00 00 00 01 00 01 00 B 98 00 00 34 00 00 91 50 00 00 00 00 00 34 00 20 00 05 00 28 00 1a&燃气轮机;

    已修改:&书信电报;缓冲器7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 02 00 00 00 00 01 00 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 ... >

    为什么会这样?我怎样才能摆脱这个?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jaromanda X    6 年前

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

    然而,正如你所指出的,“真正的代码”有点复杂——我只是觉得有必要指出它,以防有人突然说“但是你为什么不……”:p