Node.js API详解之 string_decoder用法实例分析


Posted in Javascript onApril 29, 2020

本文实例讲述了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实例,可传递encoding参数作为字符编码格式,默认为'utf8′

stringDecoder.write(buffer)

说明:

返回一个解码后的字符串,并确保返回的字符串不包含残缺的多字节字符,残缺的多字节字符会被保存在一个内部的 buffer 中,
用于下次调用 stringDecoder.write() 或 stringDecoder.end()。
buffer:待解码的Buffer

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
 
//字符的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:

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程序设计有所帮助。

Javascript 相关文章推荐
javascript Base类 包含基本的方法
Jul 22 Javascript
javascript Demo模态窗口
Dec 06 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
setTimeout内不支持jquery的选择器的解决方案
Apr 28 Javascript
javascript跨域的方法汇总
Oct 23 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
如何用JS判断两个数字的大小
Jul 21 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
Mar 28 Javascript
小程序关于请求同步的总结
May 05 Javascript
基于vue和bootstrap实现简单留言板功能
May 30 Javascript
如何在Vue.JS中使用图标组件
Aug 04 Javascript
深入浅析vue全局环境变量和模式
Apr 28 #Javascript
你准备好迎接vue3.0了吗
Apr 28 #Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 #Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 #Javascript
JS求解两数之和算法详解
Apr 28 #Javascript
jQuery插件simplePagination的使用方法示例
Apr 28 #jQuery
uni-app如何页面传参数的几种方法总结
Apr 28 #Javascript
You might like
php 获取全局变量的代码
2011/04/21 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
js类型检查实现代码
2010/10/29 Javascript
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python正则表达式匹配ip地址实例
2014/10/09 Python
python基于socket实现网络广播的方法
2015/04/29 Python
深入学习python的yield和generator
2016/03/10 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
四年级科学教学反思
2014/02/10 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
大学生工作自荐书
2014/06/16 职场文书
司机岗位职责
2015/02/04 职场文书
工作证明书
2015/06/15 职场文书
2015入党自传书范文
2015/06/26 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书