Nodejs中使用string_decoder模块将buffer转成string

本篇文章给大家介绍一下nodejs中使用string_decoder模块buffer转成string的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

Nodejs中使用string_decoder模块将buffer转成string

模块简介

string_decoder模块用于将Buffer转成对应的字符串。使用者通过调用stringDecoder.write(buffer),可以获得buffer对应的字符串。【推荐学习:《nodejs》】

它的特殊之处在于,当传入的buffer不完整(比如三个字节的字符,只传入了两个),内部会维护一个internal buffer将不完整的字节cache住,等到使用者再次调用stringDecoder.write(buffer)传入剩余的字节,来拼成完整的字符。

这样可以有效避免buffer不完整带来的错误,对于很多场景,比如网络请求中的包体解析等,非常有用。

入门例子

这节分别演示了decode.write(buffer)、decode.end([buffer])两个主要API的用法。

例子一:

decoder.write(buffer)调用传入了Buffer对象,相应的返回了对应的字符串你;

const StringDecoder = require('string_decoder').StringDecoder;const decoder = new StringDecoder('utf8');// Buffer.from('你') => const str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0]));console.log(str);  // 你

登录后复制

例子二:

当decoder.end([buffer])被调用时,内部剩余的buffer会被一次性返回。如果此时带上buffer参数,那么相当于同时调用decoder.write(buffer)和decoder.end()。

const StringDecoder = require('string_decoder').StringDecoder;const decoder = new StringDecoder('utf8');// Buffer.from('你好') => let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5]));console.log(str);  // 你str = decoder.end(Buffer.from([0xbd]));console.log(str);  // 好

登录后复制

例子:分多次写入多个字节

下面的例子,演示了分多次写入多个字节时,string_decoder模块是怎么处理的。

首先,传入了,好还差1个字节,此时,decoder.write(xx)返回你。

然后,再次调用decoder.write(Buffer.from([0xbd])),将剩余的1个字节传入,成功返回好。

const StringDecoder = require('string_decoder').StringDecoder;const decoder = new StringDecoder('utf8');// Buffer.from('你好') => let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5]));console.log(str);  // 你str = decoder.write(Buffer.from([0xbd]));console.log(str);  // 好

登录后复制

例子:decoder.end()时,字节数不完整的处理

decoder.end(buffer)时,仅传入了好的第1个字节,此时调用decoder.end(),返回了�,对应的buffer为。

const StringDecoder = require('string_decoder').StringDecoder;// Buffer.from('好') => let decoder = new StringDecoder('utf8');let str = decoder.end( Buffer.from([0xe5]) );console.log(str);  // �console.log(Buffer.from(str));  // 

登录后复制

官方文档对于这种情况的解释是这样的(跟废话差不多),大约是约定俗成了,当utf8码点无效时,替换成ef bf bd。

Returns any remaining input stored in the internal buffer as a string. Bytes representing incomplete UTF-8 and UTF-16 characters will be replaced with substitution characters appropriate for the character encoding.

相关链接

你应该记住的一个UTF-8字符「EF BF BD」http://liudanking.com/golang/utf-8_replacement_character/

更多编程相关知识,请访问:nodejs!!

以上就是Nodejs中使用string_decoder模块将buffer转成string的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2713171.html

(0)
上一篇 2025年3月7日 21:21:04
下一篇 2025年3月3日 16:32:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • nodejs设置NODE_ENV时发生错误怎么解决?

    本篇文章给大家介绍一下windows环境中nodejs设置node_env错误的解决方案。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐学习:《nodejs》】 今天在看node文档的时候,看到《Node.js 开…

    2025年3月7日 编程技术
    200
  • 详解Nodejs中的阻塞和非阻塞

    本篇文章带大家理解一下nodejs中的阻塞和非阻塞。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 推荐学习:《nodejs》 对于阻塞和非阻塞这两个概念大家应该都有一些自己的理解: 再简单说一下,阻塞大部分是由于同步模式…

    2025年3月7日
    200
  • 如何使用Nodejs连接Mysql,实现基本的增删改查操作

    本篇文章给大家介绍一下如何使用nodejs连接mysql,实现基本的增删改查(crud)操作。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐学习:《nodejs》】 接下来示例代码的主要技术点包括 基础框架 Koa…

    2025年3月7日 编程技术
    200
  • 深入了解调试nodejs程序的方法

    对于开发者来说,在开发应用程序的过程中,往往为了开发方便和解决bug需要借助于编程语言的调试功能。一般来说我们需要借助于强大IDE的调试功能来完成这项工作。nodejs也不例外。 今天我们来详细介绍一下如何调试nodejs程序。 开启nod…

    2025年3月7日 编程技术
    200
  • 浅谈浏览器中本地运行Node.js的方法

    本篇文章给大家介绍一下在浏览器中本地运行node.js的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐学习:《nodejs 教程》】 一切要从收到一封邮件开始 大早上,我收到一封邮件,StackBlitz说正…

    2025年3月7日 编程技术
    200
  • 一起了解Nodejs和命令行程序

    本篇文章给大家介绍一下nodejs和命令行程序。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 造物无言却有情,每于寒尽觉春生。千红万紫安排著,只待新雷第一声。 —— 清.张维屏 《新雷》 源起 植根于Unix系统环境下的…

    2025年3月7日 编程技术
    200
  • Nodejs可以应用于那些场景?

    本篇文章给大家介绍一些nodejs的应用场景。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 nodejsApache 的多线程高并发模式 优点:支持多线程并发 缺点:阻塞 nodejs什么是线程 线程是可以独立运行的最小…

    2025年3月7日
    200
  • 详解使用Docker给nodejs程序打包的方法

    本篇文章带大家了解一下docker,介绍为什么要使用 docker?如何使用 docker?以及使用docker给nodejs程序打包的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 你听到过这样的对话吗? 这种对话…

    2025年3月7日 编程技术
    200
  • 浅谈Nodejs如何进行多线程处理

    本篇文章给大家介绍一下nodejs进行多线程处理的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 Threads à gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。【推荐学…

    2025年3月7日
    200
  • 深入了解Nodejs中的mongoose工具

    本篇文章给大家详细介绍一下nodejs mongoose。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 Mongoose 是在nodejs环境下,对mongodb进行便捷操作的对象模型工具。本文介绍解(翻)密(译)Mon…

    2025年3月7日
    200

发表回复

登录后才能评论