Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js buf.toString vs String.fromCharCode大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从0xed(237)显示角色í.

String.fromCharCode产生正确的结果:

String.fromCharCode(0xed); // 'í'

但是,使用缓冲区时:

var buf = new Buffer(1);
buf.writeUInt8(0xed,0); // <Buffer ed>
buf.toString('utf8'); // '?',same as buf.toString()
buf.toString('binary'); // 'í'

使用Buffer.toString的’binary’是deprecated,所以我想避免这种情况.

其次,我还可以预期传入的数据是多字节的(即UTF-8),例如:

String.fromCharCode(0x0512); // Ԓ - correct
var buf = new Buffer(2);
buf.writeUInt16LE(0x0512,0); // <Buffer 12 05>,[0x0512 & 0xff,0x0512 >> 8]
buf.toString('utf8'); // Ԓ - correct
buf.toString('binary'); // Ô

请注意,这两个示例都不一致.

那么,我错过了什么?我假设我不应该做什么? String.fromCharCode是否神奇?

解决方法

似乎您可能会假设字符串和缓冲区使用相同的位长和编码.

JavaScript字符串为16-bit,UTF-16 sequences,而Node的缓冲区为8位序列.

UTF-8也是一个可变字节长度编码,代码点消耗between 1 and 6 bytes.例如,UT的UTF-8编码占用2个字节:

> new Buffer('í','utf8')
<Buffer c3 ad>

并且,就其本身而言,0xed不是UTF-8编码中的有效字节,因此?代表一个“未知的角色”.但是,它是与String.fromCharCode()一起使用的有效UTF-16代码.

此外,您建议的第二个示例的输出似乎不正确.

var buf = new Buffer(2);
buf.writeUInt16LE(0x0512,0);
console.log(buf.toString('utf8')); // "\u0012\u0005"

您可以绕过String.fromCharCode()来查看UTF-8编码.

var buf = new Buffer(String.fromCharCode(0x0512),'utf8');
console.log(buf); // <Buffer d4 92>

大佬总结

以上是大佬教程为你收集整理的Node.js buf.toString vs String.fromCharCode全部内容,希望文章能够帮你解决Node.js buf.toString vs String.fromCharCode所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。