一、乱码是如何产生的
测试数据:
故常无,欲以观其妙,常有,欲以观其徼。
代码如下:
执行程序,得到以下输出结果:
出现乱码的问题,在于如下这句代码:
outputStr += buffer
这句代码隐藏了toString()的操作, 它等价于如下的代码:
outputStr = outputStr + buffer.toString();
toString()方法的默认编码是UTF-8,中文字在UTF-8下占3个字节,由于读取的字节数并不能完整的转化为中文,故出现乱码。
二、解决方案
1、通过Buffer.concat()方法,拼接读取的数据,最后再转换为字符串
代码如下:
输出结果:
从上图可知,最终得到的字符串是没有乱码的。
2、通过string_decoder模块的提供的StringDecoder对象来解决乱码
代码如下:
输出结果: