js,nodejs如何判断文件是什么编码格式

nodejs编码只支持utf8的编码方式,无论是打开某个文件或者写.js脚本都得以utf8的编码方式保存,不然程序无法运行,读出来的文件是乱码。

如果是在前台,读取文件是通过FileReader或者FileReaderSync这两个webAPI和input[type='file']标签来配合来完成,但是这个两个API已经包涵了判断文件的编码方式的功能,无论是GBK还是utf8编码的文件都能正确打开不出现乱码,但是nodejs就会出现这样的问题,读取gbk和unicode编码的文件出现奇怪的乱码,有一个模块iconv-lite可以解决编码问题,但是前提是你得知道这个文件的编码方式,举个例子:

有一个gkb的文件叫gbk.txt正确查看它的方式如下:

var icon=require('iconv-lite');

var fs=require('fs')

fs.readFile('gbk.txt',function(err,buffer){

  var str=iconv.decode(buffer,'gbk')

  console.log(str)//得到无乱码的内容

})

但是如果不知道文件的编码方式,那有该怎么办呢?

那就来聊一聊编码方式,首先UNICODE编码,UNICODE编码的文件无论内容是什么,前两个字节要不是FF FE 或者 FE FF,

utf-8头两个字节是EF BB,至于gbk吧,目前我没找到判断方法,只能粗略的判断如果不是unicode和utf8就认为是GBK,

代码如下:

var fs=require('fs')

fs.readFile('code.txt',function(err,buffer){

     if(buffer[0]==0xff&&buffer[1]==0xfe){

          console.log('unicode')

    }else if(buffer[0]==0xfe&&buffer[1]==0xff){

     console.log('unicode')

    }else if(buffer[0]==0xef&&buffer[1]==0xbb){

   console.log('utf8')

    }else{

     console.log('else')

    }

})

posted @ 2017-04-26 09:46  名分开就是姓名  阅读(12780)  评论(16编辑  收藏  举报