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入门学习资料收集整理篇
Jul 06 Javascript
jQuery 在光标定位的地方插入文字的插件
May 10 Javascript
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
react 兄弟组件如何调用对方的方法示例
Oct 23 Javascript
小程序分享模块超级详解(推荐)
Apr 10 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
Nov 24 Javascript
使用js实现单链解决前端队列问题的方法
Feb 03 Javascript
vue render函数动态加载img的src路径操作
Oct 26 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
建站常用13种PHP开源CMS比较
2009/08/23 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python使用MD5加密字符串示例
2014/08/22 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
HQhair美国/加拿大:英国化妆品、美容及美发产品商城
2019/04/15 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
社区活动邀请函范文
2014/01/29 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
业务员管理制度范本
2015/08/06 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫