由于Node环境当中不支持GBK编码,此时读到的文件,英文可读取,但中文乱码
node.js当中的Buffer对象支持的编码格式的种类(支持的格式:ascii、utf8、utf16le、ucs2、base64、binary、hex)有限,不支持GBK的编码形式。
解决办法
iconv-lite用于在node当中处理在各种操作系统出现的各种奇特编码,该模块不提供读写文件的操作,只提供文件编码转换的功能。
npm install iconv-lite
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') 无济于事。
不是很明白,但有个忽略警告的方法
使用前说明一下忽略警告,就不会报错
通常使用JavaScript正则表达式进行匹配提取。基本处理步骤为:
处理编码类型(可能需要转码处理)。node.js不能很好处理字符编码问题(默认UTF8),而在Windows中文区,一般文件内容编码大部分为GBK、GB2312之类的,你要转码为UTF8。(如果不存在编码问题,自然不必处理)
读取文本内容。
进行正则匹配中文部分。
最后进行处理(获取中文、或者替换为其他之类的)。
// 举个例子let reg = /[\u4e00-\u9fa5]/g
let str = "中文123Abc"
let regResult = str.match(reg)
console.log(regResult)
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。