本文实例讲述了Node.js API详解之 string_decoder用法。分享给大家供大家参考,具体如下:string_decoder 模块提供了一个 API,用于把 Buffer 对象解码成字符串。对于参数末尾不完整的多字节字符,string_decoder会将其保存在内部的buffer中,当再次解码时,补充到参数开头。通过 const { StringDecoder } = require(‘string_decoder'); 的方式引用string_decoder模块。目录:

new StringDecoder([encoding])

stringDecoder.write(buffer)

stringDecoder.end([buffer])


new StringDecoder([encoding])stringDecoder.write(buffer)stringDecoder.end([buffer])

new StringDecoder([encoding])new StringDecoder([encoding])new StringDecoder([encoding])说明:
创建一个新的StringDecoder实例,可传递encoding参数作为字符编码格式,默认为'utf8′
创建一个新的StringDecoder实例,可传递encoding参数作为字符编码格式,默认为'utf8′stringDecoder.write(buffer)stringDecoder.write(buffer)stringDecoder.write(buffer)说明:
返回一个解码后的字符串,并确保返回的字符串不包含残缺的多字节字符,残缺的多字节字符会被保存在一个内部的 buffer 中,
用于下次调用 stringDecoder.write() 或 stringDecoder.end()。
buffer:待解码的Buffer
返回一个解码后的字符串,并确保返回的字符串不包含残缺的多字节字符,残缺的多字节字符会被保存在一个内部的 buffer 中,
用于下次调用 stringDecoder.write() 或 stringDecoder.end()。
buffer:待解码的Bufferdemo:
const decoder = new StringDecoder('utf8');

//字符的16进制小于0x80属于单字节
let outString = 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?


const decoder = new StringDecoder('utf8');

//字符的16进制小于0x80属于单字节
let outString = 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])stringDecoder.end([buffer])stringDecoder.end([buffer])说明:
以字符串的形式返回内部 buffer 中剩余的字节,残缺的字节会被替换成符合字符编码的字符
如果提供了 buffer 参数,则在返回剩余字节之前会再执行一次 stringDecoder.write()
以字符串的形式返回内部 buffer 中剩余的字节,残缺的字节会被替换成符合字符编码的字符
如果提供了 buffer 参数,则在返回剩余字节之前会再执行一次 stringDecoder.write()demo:
const decoder = new StringDecoder('utf8');

//字符的16进制小于0x80属于单字节
let outString = 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);
//?


const decoder = new StringDecoder('utf8');

//字符的16进制小于0x80属于单字节
let outString = 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程序设计有所帮助。