Nodejs中使用string_decoder模块将buffer转成string
时间:2021-05-20
来源:互联网
标签:
今天PHP爱好者给大家带来本篇文章给大家介绍一下Nodejs中使用string_decoder模块将buffer转成string的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

模块简介
string_decoder模块用于将Buffer转成对应的字符串。使用者通过调用stringDecoder.write(buffer),可以获得buffer对应的字符串。
它的特殊之处在于,当传入的buffer不完整(比如三个字节的字符,只传入了两个),内部会维护一个internal buffer将不完整的字节cache住,等到使用者再次调用stringDecoder.write(buffer)传入剩余的字节,来拼成完整的字符。
这样可以有效避免buffer不完整带来的错误,对于很多场景,比如网络请求中的包体解析等,非常有用。
入门例子
这节分别演示了decode.write(buffer)、decode.end([buffer])两个主要API的用法。
例子一:
decoder.write(buffer)调用传入了Buffer对象<Buffer e4 bd a0>,相应的返回了对应的字符串你;
const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');
// Buffer.from('你') => <Buffer e4 bd a0>
const str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0]));
console.log(str); // 你
例子二:
当decoder.end([buffer])被调用时,内部剩余的buffer会被一次性返回。如果此时带上buffer参数,那么相当于同时调用decoder.write(buffer)和decoder.end()。
const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');
// Buffer.from('你好') => <Buffer e4 bd a0 e5 a5 bd>
let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5]));
console.log(str); // 你
str = decoder.end(Buffer.from([0xbd]));
console.log(str); // 好
例子:分多次写入多个字节
下面的例子,演示了分多次写入多个字节时,string_decoder模块是怎么处理的。
首先,传入了<Buffer e4 bd a0 e5 a5>,好还差1个字节,此时,decoder.write(xx)返回你。
然后,再次调用decoder.write(Buffer.from([0xbd])),将剩余的1个字节传入,成功返回好。
const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');
// Buffer.from('你好') => <Buffer e4 bd a0 e5 a5 bd>
let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5]));
console.log(str); // 你
str = decoder.write(Buffer.from([0xbd]));
console.log(str); // 好
例子:decoder.end()时,字节数不完整的处理
decoder.end(buffer)时,仅传入了好的第1个字节,此时调用decoder.end(),返回了�,对应的buffer为<Buffer ef bf bd>。
const StringDecoder = require('string_decoder').StringDecoder;
// Buffer.from('好') => <Buffer e5 a5 bd>
let decoder = new StringDecoder('utf8');
let str = decoder.end( Buffer.from([0xe5]) );
console.log(str); // �
console.log(Buffer.from(str)); // <Buffer ef bf bd>
官方文档对于这种情况的解释是这样的(跟废话差不多),大约是约定俗成了,当utf8码点无效时,替换成ef bf bd。
Returns any remaining input stored in the internal buffer as a string. Bytes representing incomplete UTF-8 and UTF-16 characters will be replaced with substitution characters appropriate for the character encoding.
相关链接
你应该记住的一个UTF-8字符「EF BF BD」http://liudanking.com/golang/utf-8_replacement_character/
以上就是Nodejs中使用string_decoder模块将buffer转成string的详细内容,更多请关注php爱好者其它相关文章!
-
Ext.MessageBox消息框使用详解 时间:2025-11-20 -
GAppProxy超详细安装配置教程 时间:2025-11-20 -
C#中e.Cancel用法详解 e.Cancel和e.Handled区别 时间:2025-11-20 -
TestDirector超详细下载、安装、配置教程 时间:2025-11-20 -
AssemblyInfo.cs文件详解(常见属性及作用等) 时间:2025-11-20 -
什么是无理数 常见的无理数有哪些 无理数和有理数的区别 时间:2025-11-19
今日更新
-
洛克王国世界炫彩球有哪些-炫彩精灵获取方式
阅读:18
-
币安风控透明度解析:用户需知的5大关键点
阅读:18
-
洛克王国世界满级多少级-洛克王国世界等级上限
阅读:18
-
星布谷地怎么抓蝴蝶-星布谷地抓蝴蝶方法
阅读:18
-
蛋仔派对超燃竞技场怎么玩-超燃竞技场玩法详解
阅读:18
-
明日方舟终末地公测时间-明日方舟终末地什么时候上线
阅读:18
-
蛋仔派对热血足球怎么玩-热血足球玩法详细
阅读:18
-
加密货币中的 ABCD 型态是什么?运用方式、绘制以及交易介绍
阅读:18
-
币安客服无法干预风控的5大原因解析
阅读:18
-
想知道伤口的梗痛是什么梗?揭秘网络热梗背后的中二制造机!
阅读:18










