带有é字符的Node.js缓冲区

时间:2016-12-14 18:52:40

标签: node.js

我已经创建了一个简单的缓冲区,我已将其添加到我的字符串CHERRY_PICK_HEAD

这是我的代码:

"Héllo"

然而,它返回var str = "Héllo"; var buff = new Buffer(str.length); buff.write(str); console.log(buff.toString("utf8")); 而不是"Héll",为什么?

我该如何解决?

2 个答案:

答案 0 :(得分:1)

UTF-8字符可以有不同的长度 - 从1字节到4字节 - 请看这个答案https://stackoverflow.com/a/9533324/4486609

因此,可以假设它有2个字节,就像你做的那样。

至于正确的长度,请查看此https://stackoverflow.com/a/9864762/4486609

答案 1 :(得分:1)

.length报告字符数,而不是字节数。但new Buffer()期望字节数。 'é'需要两个字节。所以最后一个char从缓冲区的末尾掉落并被截断。

如果您不需要支持Node.js 4.x.x之前的任何内容,可以使用Buffer.from()

let buffer = Buffer.from('Héllo');
console.log(buffer.toString()); // 'Héllo'