宝哥软件园

Node.js文件编码格式的转换方法

编辑:宝哥软件园 来源:互联网 时间:2021-08-31

该项目的许多lua文件不是utf-8格式,在EditPlus查看时显示为ASCII。还有那些有BOM的,要妥善处理。以前写过,有一定的规律。

ASCII编码相当痛苦。通过搜索网上资源,反复测试对比,最终形成以下可靠方法(部分EditPlus显示编码为utf-8,但node.js库返回其他coding _)

要判断修改是否正确,只需要修改后通过SVN提交,浏览提交列表,双击任意需要提交的文件即可。如果出现下图所示的对话框,说明修改成功,其他中文反而变乱码。

var fs=require(' fs ');var char det=require(' char det ');var jschardet=require(' jschardet ');var encoding=require(' encoding ');Var路径='lua目录';函数read directory(dirPath){ if(fs . existssync(dirPath)){ var files=fs . readdirsync(dirPath);files.forEach(函数(文件){ var file path=dirPath/' file;var stats=fs . stat sync(file path);if(stats . isdirectory()){//console . log('/nread directory: n ',filePath,' n ');readDirectory(文件路径);} else if (stats.isFile() /。lua$/。test(file path)){ var buff=fs . readfilesync(file path);if (buff.length buff[0])。toString(16)。toLowerCase()=='ef' buff[1]。toString(16)。toLowerCase()=='bb' buff[2]。toString(16)。toLowerCase()==' BF '){//ef bbbf 239 187 191 console . log( n找到的BOM文件:',filePath,' n ');buff=buff . slice(3);fs.writeFile(filePath,buff.toString(),' utf8 ');}///{ encoding : ' UTF-8 ',confidence : 0.99 }//var charset=chardet . detectfilesync(file path);var info=jschardet . detect(buff);if(info . encoding==' GB2312 ' | | info . encoding==' ascii '){ var result buffer=encoding . convert(buff,' UTF-8 ',info . encoding);fs.writeFile(filePath,resultBuffer,' utf8 ');} else if (info.encoding!='UTF-8' chardet.detectFileSync(文件路径)!='UTF-8') { if (buff.toString()。indexOf(' r n ')-1){ var result buffer=encoding . convert(buff,' UTF-8 ',' GBK ');fs.writeFile(filePath,resultBuffer,' utf8 ');} } } });} else { console.log('未找到路径: ',dirPath);} } ReadActiVe(路径);注意上面的判断,如果第一个是GB2312或者ascii,对应的编码会直接转换成utf-8。如果返回的是格式,首先判断PC下是否有新的行字符,如果有,就当GBK。

整个思路其实比较简单,难点在于判断文件编码格式。这真的很难。获取原始编码格式后,调用encoding.convert(buff,目标编码格式,原始编码格式);可以获得所需的代码。如果你有空有兴趣,可以下载记事本的源代码,看看它是如何判断文件的编码格式的

注意:以上方法修改的文件与Mac上要提交的文件列表一致,至少可以解决我目前遇到的问题。如果有什么特别的地方,可以修改上面的代码。

用过的第三方库:

编码https://github.com/andris9/encodingjschardethttps://github.com/aadsm/jschardetnode-chardethttps://github.com/runk/node-chardet

关于编码相关的基础知识,请参考本文://www . JB 51 . net/article/31045 . htm。

维基百科等资料过于专业,对ASCII编码的介绍也不多,就不一一列举了

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+