最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js文件編碼格式的轉換的方法

 更新時間:2018年04月27日 08:55:01   作者:meteoric_cry  
這篇文章主要介紹了Node.js文件編碼格式的轉換的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

項目很多 lua 文件不是 utf-8格式,使用 EditPlus 查看的時候,顯示為ASCII。還有的是帶BOM的,帶BOM倒好處理,之前寫過,有一定規(guī)律。

ASCII編碼就比較蛋疼,通過搜索網(wǎng)上資源,反復測試對比,最終形成下面比較靠譜的方法(有一些 EditPlus顯示編碼為utf-8但node.js庫返回的卻是其它編碼>_<)

判斷修改是否無誤,只需要在修改完之后,通過SVN提交,瀏覽提交列表,雙擊任意一項待提交文件,如果顯示下圖所示的對話框,則說明修改成功,其它都會看到中文反而變成亂碼了

var fs = require('fs');
var chardet = require('chardet');
var jschardet = require("jschardet");
var encoding = require("encoding");

var path = "lua目錄";

function readDirectory(dirPath) {
  if (fs.existsSync(dirPath)) {
    var files = fs.readdirSync(dirPath);

    files.forEach(function (file) {
      var filePath = dirPath + "/" + file;
      var stats = fs.statSync(filePath);

      if (stats.isDirectory()) {
        // console.log('/n讀取目錄:\n', filePath, "\n");
        readDirectory(filePath);
      } else if (stats.isFile() && /\.lua$/.test(filePath)) {
        var buff = fs.readFileSync(filePath);
        if (buff.length && buff[0].toString(16).toLowerCase() == "ef" && buff[1].toString(16).toLowerCase() == "bb" && buff[2].toString(16).toLowerCase() == "bf") {
          //EF BB BF 239 187 191
          console.log('\n發(fā)現(xiàn)BOM文件:', filePath, "\n");

          buff = buff.slice(3);
          fs.writeFile(filePath, buff.toString(), "utf8");
        }

        // { encoding: 'UTF-8', confidence: 0.99 }
        // var charset = chardet.detectFileSync(filePath);
        var info = jschardet.detect(buff);

        if (info.encoding == "GB2312" || info.encoding == "ascii") {
          var resultBuffer = encoding.convert(buff, "UTF-8", info.encoding);
          fs.writeFile(filePath, resultBuffer, "utf8");
        }
        else if (info.encoding != "UTF-8" && chardet.detectFileSync(filePath) != "UTF-8")
        {
          if (buff.toString().indexOf("\r\n") > -1)
          {
            var resultBuffer = encoding.convert(buff, "UTF-8", "GBK");
            fs.writeFile(filePath, resultBuffer, "utf8");
          }
        }
      }
    });

  } else {
    console.log('Not Found Path : ', dirPath);
  }
}

readDirectory(path);

注意上面的判斷,第一個明確是 GB2312或者ascii時,直接將相應的編碼轉為 utf-8。而如果返回是格式,先判斷是否有PC下的換行符,如果有則全部將它視為GBK進行處理。

整個思路其實是比較簡單,難點在于如果判斷文件編碼格式。這個真的很難>_<,獲取原編碼格式后,調用 encoding.convert(buff, 目標編碼格式 , 原始編碼格式 ); 便可得到所需要的編碼。如果有空而且有興趣,可以下載Notepad++的源碼,看它是如何判斷文件的編碼格式

注:上面的方法所修改的文件,跟 Mac 上需要提交的文件列表是一致的,至少能解決我目前遇到的問題。如果有特殊的,可對上面的代碼進行修正。

用到的第三方庫:

encoding https://github.com/andris9/encoding
jschardet https://github.com/aadsm/jschardet
node-chardet https://github.com/runk/node-chardet

編碼相關的基礎知識,可以參考這篇文章: http://m.fzitv.net/article/31045.htm

維基百科和其它資料太過專業(yè)化了,而且對 ASCII 編碼的介紹不多,不再一一列舉出來了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • node.js中debug模塊的簡單介紹與使用

    node.js中debug模塊的簡單介紹與使用

    這篇文章主要介紹了node.js中debug模塊的相關資料,文中通過圖文介紹的非常詳細,相信會對大家具有一定的參考學習價值,需要的朋友們下面來跟著小編來一起看看吧。
    2017-04-04
  • 利用node.js爬取指定排名網(wǎng)站的JS引用庫詳解

    利用node.js爬取指定排名網(wǎng)站的JS引用庫詳解

    最近在學習node.js爬蟲,由于 nodejs 強大的異步特性,讓我們可以輕松以異步高并發(fā)去爬取網(wǎng)站,下面這篇文章主要給大家介紹了關于利用node.js爬取指定排名網(wǎng)站的JS引用庫的相關資料,需要的朋友可以參考下。
    2017-07-07
  • node.js 抓取代理ip實例代碼

    node.js 抓取代理ip實例代碼

    這篇文章主要介紹了node.js 抓取代理ip實例代碼的相關資料,需要的朋友可以參考下
    2017-04-04
  • Npm link的作用與使用示例代碼

    Npm link的作用與使用示例代碼

    npm link可以幫助我們模擬包安裝后的狀態(tài),它會在系統(tǒng)中做一個快捷方式映射,讓本地的包就好像 install 過一樣,可以直接使用,這篇文章主要介紹了Npm link的作用與使用示例代碼,需要的朋友可以參考下
    2023-01-01
  • Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法

    Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法

    這篇文章介紹了Node.js數(shù)據(jù)流Stream之Duplex流和Transform流的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Node.js中的cluster模塊深入解讀

    Node.js中的cluster模塊深入解讀

    NodeJS引入了Cluster模塊試圖簡化這些體力勞動,使用Cluster模塊可以運行并管理多個實例進程,下面這篇文章主要給大家介紹了關于Node.js中cluster模塊的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-06-06
  • 完美解決linux下node.js全局模塊找不到的情況

    完美解決linux下node.js全局模塊找不到的情況

    今天小編就為大家分享一篇完美解決linux下node.js全局模塊找不到的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Nodejs做文本數(shù)據(jù)處理實現(xiàn)詳解

    Nodejs做文本數(shù)據(jù)處理實現(xiàn)詳解

    這篇文章主要為大家介紹了Nodejs做文本數(shù)據(jù)處理實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • nodejs前端自動化構建環(huán)境的搭建

    nodejs前端自動化構建環(huán)境的搭建

    本文這里給大家介紹的是nodejs中前端自動化構建環(huán)境的搭建方法,非常的細致全面,有需要的小伙伴可以參考下
    2017-07-07
  • node.js中的buffer.copy方法使用說明

    node.js中的buffer.copy方法使用說明

    這篇文章主要介紹了node.js中的buffer.copy方法使用說明,本文介紹了buffer.copy的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12

最新評論

凌云县| 中江县| 垣曲县| 门头沟区| 平山县| 商洛市| 寻甸| 肇州县| 潞城市| 田东县| 榆树市| 陇西县| 普格县| 扬州市| 逊克县| 饶平县| 宽甸| 西华县| 上饶县| 宁阳县| 昭通市| 普陀区| 灵璧县| 新巴尔虎右旗| 贺州市| 哈巴河县| 兴文县| 辽中县| 舒兰市| 康保县| 大兴区| 佳木斯市| 会宁县| 航空| 区。| 房山区| 连平县| 兴宁市| 敖汉旗| 佛学| 吉木萨尔县|