这是我参与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的转换,欢迎点赞和评论~