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 相关文章推荐
网页图片延时加载的js代码
Apr 22 Javascript
一次失败的jQuery优化尝试小结
Feb 06 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 Javascript
基于jQuery实现select下拉选择可输入附源码下载
Feb 03 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
JS将unicode码转中文方法
May 08 Javascript
JavaScript+CSS相册特效实例代码
Sep 07 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
Aug 17 Javascript
值得收藏的八个常用的js正则表达式
Oct 19 Javascript
js实现踩五彩块游戏
Feb 08 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
深入浅析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精度计算的问题解析
2019/06/21 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
javascript常见操作汇总
2014/09/03 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
Python常用列表数据结构小结
2014/08/06 Python
Python入门篇之字符串
2014/10/17 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python学习基础之循环import及import过程
2018/04/22 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python实现决策树分类(2)
2018/08/30 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
建筑班组长岗位职责
2014/01/02 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
一般党员对照检查材料
2014/09/24 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
小学四年级作文之写景
2019/08/23 职场文书
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang