深入浅出Node.js读书笔记:Buffer的拼接(6.3)

本文探讨了在Node.js中处理Buffer时可能出现的乱码问题,特别是在读取流时。通过分析6.3.1章节,揭示了由于Buffer长度限制导致的宽字节编码乱码现象。解决方案包括使用`setEncoding()`方法设置流的编码和利用`string_decoder`模块的`StringDecoder`。6.3.3章节中,介绍了正确拼接Buffer的方法,即使用数组存储Buffer片段并用`Buffer.concat()`生成合并的Buffer对象。
摘要由CSDN通过智能技术生成

Buffer在使用中,通常是以一段一段的传输,以下为输入流中读取内容的代码:

	var fs = require('fs'); 
	var rs = fs.createReadStream('test.md'); 
	var data = ''; 
	rs.on("data", function (chunk){
    
	 data += chunk; 
	}); 
	rs.on("end", function () {
    
	 console.log(data); 
	});

上述代码是读取流的示范代码,对初学者而言,不存在什么问题。但仔细想想,如果流中存在宽字节编码时,就会出现问题。问题就出在 data += chunk; 这句代码里隐藏了toString()操作,它等价于如下代码:

	data = data.toString() + chunk.toString();

对于宽字节的中文,就会有问题。

为了模拟该问题的出现,我们将从文件流中读取Buffer,并且Buffer的长度限制在11,

代码如下:

var rs = fs.createReadStream('test.md', {
   highWaterMark: 11});

test.md数据为李白的《静夜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值