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操作select下拉列表框的代码
Jun 04 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
Javascript动态创建div的方法
Feb 09 Javascript
使用AngularJS实现表单向导的方法
Jun 19 Javascript
javascript下使用Promise封装FileReader
Feb 19 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
Vue渲染过程浅析
Mar 14 Javascript
小程序简单两栏瀑布流效果的实现
Dec 18 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
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
php购物车实现方法
2015/01/03 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
javascript json 新手入门文档
2009/12/03 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python实现转圈打印矩阵
2019/03/02 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
Ruby如何创建一个线程
2013/03/10 面试题
2013年军训通讯稿
2014/02/05 职场文书
写自荐信的注意事项
2014/03/09 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
2014年管理工作总结
2014/11/22 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
学生会任命书范本
2015/09/21 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
Go语言设计模式之结构型模式
2021/06/22 Golang