【8.25】nodejs 原理 - Buffer(2) - Buffer 的转换

189 阅读2分钟

这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

这是 Buffer 部分的第二篇文章

第一篇:Buffer 的结构

上一篇内容说到,我们在后端开发中需要操作数据库、处理图片、接收上传的文件,在网络流和文件流中,需要大量处理二进制数据,这时候,JavaScript 的字符串是远不能满足需求的,于是就有了 Buffer 对象

Buffer 主要用于操作字节,不受 V8 堆内存的限制。由 C++ 和 JavaScript 两部分组成,C++ 主要进行内存申请,JavaScript 进行内存分配,对于不同大小的 Buffer 操作,有不同的申请和分配内存的方式。

这篇文章主要讲 Buffer 和字符串之间的转换,目前支持的字符串的编码类型有这几种:ASCII、UTF-8、UTF-16LE/UCS-2、Base64、Binary、Hex

字符串转 Buffer

Buffer.from(str, [encoding])

其中 encoding 默认是 utf8,表示字符串的编码

Buffer 转字符串

buf.toString([encoding[, start[, end]]]
  • encoding 要使用的字符编码。 默认值:  'utf8'
  • start 开始解码的字节偏移量。 默认值:  0
  • end停止解码的字节偏移量(不包括在内)。 默认值:  buf.length.
const buf = Buffer.from('abcdefghijklmnopqrstuvwxyz');
buf.toString('utf8', 0, 5);  // 'abcde'

const buf1 = Buffer.from('严');  // 由3个字节组成
buf1.toString('utf8', 0, 2);   // '�' 只取前两个字节是无法解析的,不符合utf8的格式
buf1.toString('utf8', 0, 3);   // '严'

关于 utf-8 的解析方式可以查看我之前的文章:必须了解的 Unicode 和 字符集

Buffer 不支持的编码类型

Buffer.isEncoding(encoding)

可以通过 isEncoding 方法判断 Buffer 是否支持某种编码类型,在中国常用的GBK、GB2312和BIG-5编码都不在支持的行列中,这时可以通过 iconv 和 iconv-lite 两个第三方模块进行更多的编码转换。

以上是Buffer的转换,欢迎点赞和评论~