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 1.2.x 升? 1.3.x 注意事项
May 06 Javascript
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
Javascript 加载和执行-性能提高篇
Dec 28 Javascript
Windows 系统下安装和部署Egret的开发环境
Jul 31 Javascript
node.js中的path.resolve方法使用说明
Dec 08 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
Sep 04 jQuery
vue实现跨域的方法分析
May 21 Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
JavaScript实现简单日历效果
Sep 11 Javascript
Vue用mixin合并重复代码的实现
Nov 27 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue基础之事件v-onclick="函数"用法示例
2019/03/11 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
如何在vue 中引入使用jquery
2020/11/10 jQuery
Python列表计数及插入实例
2014/12/17 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
2014年小学元旦活动方案
2014/02/12 职场文书
临床医学专业求职信
2014/08/08 职场文书
教师节主持词开场白
2015/05/29 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python