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 相关文章推荐
基于jQuery的合并表格中相同文本的相邻单元格的代码
Apr 06 Javascript
js加强的经典分页实例
Mar 15 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
Jul 10 Javascript
JS实现向表格行添加新单元格的方法
Mar 30 Javascript
javascript中传统事件与现代事件
Jun 23 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
js学使用setTimeout实现轮循动画
Jul 17 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
浅谈Postman解决token传参的问题
Mar 31 Javascript
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
javascript浅层克隆、深度克隆对比及实例解析
Feb 09 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 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
escape unescape的php下的实现方法
2007/04/27 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
人生苦短我用python python如何快速入门?
2018/03/12 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
入党自我鉴定范文
2013/10/04 职场文书
社会实践心得体会
2014/01/03 职场文书
租房协议书
2014/04/10 职场文书
学校献爱心活动总结
2014/07/08 职场文书
单位工作证明书格式
2014/10/04 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
入党后的感想
2015/08/10 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python