node读取本地文件中文乱码

node读取本地文件

let title = fs.readFileSync('./server/assets/title.txt', 'utf-8');

由于Node环境当中不支持GBK编码,此时读到的文件,英文可读取,但中文乱码

node.js当中的Buffer对象支持的编码格式的种类(支持的格式:ascii、utf8、utf16le、ucs2、base64、binary、hex)有限,不支持GBK的编码形式。

解决办法
iconv-lite用于在node当中处理在各种操作系统出现的各种奇特编码,该模块不提供读写文件的操作,只提供文件编码转换的功能。

npm install iconv-lite

const fs = require('fs');
const iconv = require('iconv-lite');
let title = fs.readFileSync('./server/assets/title.txt', {encoding:'binary'});
let restitle = iconv.decode(title, 'gbk');

restitle即为txt文档中的中文

此时会出现一个警告
Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding

上面这个github中给出了详细解释,大概意思是说
在使用iconv.decode功能进行解码之前,原始资源(无意间)已经body += chunk通过javascript类型转换进行了解码。
双重解码不仅会导致错误的结果,而且几乎不可能恢复原始字节,因为utf8转换是有损的,因此即使这样做也iconv.decode(new Buffer(body, 'utf8'), 'win1252')无济于事。

不是很明白,但有个忽略警告的方法

iconv.skipDecodeWarning = true;

使用前说明一下忽略警告,就不会报错

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。