Open LeoYuan opened 10 years ago
NodeJS并不支持以GBK的方式来读取文件,只能以UTF-8方式读取,或者不解码成任何编码格式,直接以字节流返回,这时在读取文件后发现所有中文数据都变成了乱码,写入一个新文件也是一堆乱码。
GBK
UTF-8
一句话概括解决此类乱码问题就是在读取入口和写入出口进行编码转换。
具体步骤:
var iconv = require('iconv-lite'); // iconv-lite是纯js实现的编码转化工具,速度比iconv更快! var utf8Str = iconv.decode(buf, 'GBK');
返回的utf8Str是个UTF-8的字符串,因为JS所有字符串都是UTF-8编码的!!! 所谓按照GBK来转码,只是按照GBK的解码方式来读取buf的内容,得到正确的GBK内容后再转化成UTF-8编码的字符串。我们之所以看到乱码,是因为用UTF-8的解码方式去尝试解码一段GBK的字节流。
var gbkBuffer = iconv.encode(utf8Str, 'GBK');
var through2 = require('through2'); var fs = require('fs'); var iconv = require('iconv-lite'); fs.createReadStream('./test/style_test/a.js') .pipe(through2(function (chunk, enc, callback) { var jsUTF8Str = iconv.decode(chunk.contents, 'GBK'); // 处理jsUTF8Str var gbkBuffer = iconv.encode(jsUTF8Str, 'GBK'); chunk.contents = gbkBuffer; this.push(chunk); callback(); })) .pipe(fs.createWriteStream('out.js'));
问题
NodeJS并不支持以
GBK
的方式来读取文件,只能以UTF-8
方式读取,或者不解码成任何编码格式,直接以字节流返回,这时在读取文件后发现所有中文数据都变成了乱码,写入一个新文件也是一堆乱码。解决方案
一句话概括解决此类乱码问题就是在读取入口和写入出口进行编码转换。
具体步骤:
GBK
编码方式来解码,代码如下:返回的utf8Str是个
UTF-8
的字符串,因为JS所有字符串都是UTF-8
编码的!!! 所谓按照GBK来转码,只是按照GBK的解码方式来读取buf的内容,得到正确的GBK内容后再转化成UTF-8编码的字符串。我们之所以看到乱码,是因为用UTF-8的解码方式去尝试解码一段GBK的字节流。全部代码
更多资料