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中有趣的反柯里化深入分析
Dec 05 Javascript
js遍历、动态的添加数据的小例子
Jun 22 Javascript
jsp网页搜索结果中实现选中一行使其高亮
Feb 17 Javascript
jqGrid读取选择的多行的某个属性代码
May 18 Javascript
jQuery插件pagination实现分页特效
Apr 12 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
Sep 26 Javascript
详解Angular的数据显示优化处理
Dec 26 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 Javascript
JS实现的简单标签点击切换功能示例
Sep 21 Javascript
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
jQuery实现表单动态添加与删除数据操作示例
Jul 03 jQuery
深入浅析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 redis实现超迷你全文检索
2017/03/04 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
JavaScript中的字符串操作详解
2013/11/12 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
白酒市场营销方案
2014/02/25 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
居安思危观后感
2015/06/11 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
消防宣传语大全
2015/07/13 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
MYSQL 运算符总结
2021/11/11 MySQL
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python