Node.js API详解之 string_decoder用法实例分析
本文实例讲述了Node.jsAPI详解之string_decoder用法。分享给大家供大家参考,具体如下:
string_decoder模块提供了一个API,用于把Buffer对象解码成字符串。
对于参数末尾不完整的多字节字符,string_decoder会将其保存在内部的buffer中,当再次解码时,补充到参数开头。
通过const{StringDecoder}=require(‘string_decoder');的方式引用string_decoder模块。
目录:
- newStringDecoder([encoding])
- stringDecoder.write(buffer)
- stringDecoder.end([buffer])
newStringDecoder([encoding])
说明:
创建一个新的StringDecoder实例,可传递encoding参数作为字符编码格式,默认为'utf8′
stringDecoder.write(buffer)
说明:
返回一个解码后的字符串,并确保返回的字符串不包含残缺的多字节字符,残缺的多字节字符会被保存在一个内部的buffer中,
用于下次调用stringDecoder.write()或stringDecoder.end()。
buffer:待解码的Buffer
demo:
constdecoder=newStringDecoder('utf8');
//字符的16进制小于0x80属于单字节
letoutString=decoder.write(Buffer.from([0x78,0x69,0x61,0x6f,0x71,0x69,0x61,0x6e,0x67]));
console.log(outString);
//xiaoqiang
//字符的16进制大于0x80属于双字节
outString=decoder.write(Buffer.from([0xC2,0xA2]));
console.log(outString);
//¢
//单双字节混合,置于末尾
outString=decoder.write(Buffer.from([0x78,0x69,0x61,0x6f,0x71,0x69,0x61,0x6e,0x67,0xC2]));
console.log(outString);
//xiaoqiang
outString=decoder.write(Buffer.from([0xA2]));
console.log(outString);
//¢
//单双字节混合,置于中间
outString=decoder.write(Buffer.from([0x78,0x69,0x61,0x6f,0x71,0xC2,0x69,0x61,0x6e,0x67]));
console.log(outString);
//xiaoq?iang
outString=decoder.write(Buffer.from([0xA2]));
console.log(outString);
//?
//单双字节混合,置于开始
outString=decoder.write(Buffer.from([0xC2,0x78,0x69,0x61,0x6f,0x71,0x69,0x61,0x6e,0x67]));
console.log(outString);
//?xiaoqiang
outString=decoder.write(Buffer.from([0xA2]));
console.log(outString);
//?
//单双字节混合,置于末尾
outString=decoder.write(Buffer.from([0x78,0x69,0x61,0x6f,0x71,0x69,0x61,0x6e,0x67,0xC2]));
console.log(outString);
//xiaoqiang
outString=decoder.write(Buffer.from([0x78,0xA2]));
console.log(outString);
//?x?
stringDecoder.end([buffer])
说明:
以字符串的形式返回内部buffer中剩余的字节,残缺的字节会被替换成符合字符编码的字符
如果提供了buffer参数,则在返回剩余字节之前会再执行一次stringDecoder.write()
demo:
constdecoder=newStringDecoder('utf8');
//字符的16进制小于0x80属于单字节
letoutString=decoder.write(Buffer.from([0x78,0x69,0x61,0x6f,0x71,0x69,0x61,0x6e,0x67]));
console.log(outString);
//xiaoqiang
outString=decoder.end();
console.log(outString);
//
//单双字节混合,置于末尾
outString=decoder.write(Buffer.from([0x78,0x69,0x61,0x6f,0x71,0x69,0x61,0x6e,0x67,0xC2]));
console.log(outString);
//xiaoqiang
outString=decoder.end(Buffer.from([0xA2]));
console.log(outString);
//¢
//单双字节混合,置于末尾
outString=decoder.write(Buffer.from([0x78,0x69,0x61,0x6f,0x71,0x69,0x61,0x6e,0x67,0xC2]));
console.log(outString);
//xiaoqiang
outString=decoder.end();
console.log(outString);
//?
希望本文所述对大家node.js程序设计有所帮助。