欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

ASCII編碼就比較蛋疼,通過搜索網上資源,反復測試對比,最終形成下面比較靠譜的方法(有一些 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ā)現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://www.dbjr.com.cn/article/31045.htm

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

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

相關文章

  • 異步JavaScript編程中的Promise使用方法

    異步JavaScript編程中的Promise使用方法

    這篇文章主要介紹了異步JavaScript編程中的Promise使用方法,包含Ajax的結合操作等問題,需要的朋友可以參考下
    2015-07-07
  • 搭建一個nodejs腳手架的方法步驟

    搭建一個nodejs腳手架的方法步驟

    這篇文章主要介紹了如何搭建一個nodejs腳手架的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • nodejs之koa2請求示例(GET,POST)

    nodejs之koa2請求示例(GET,POST)

    本篇文章主要介紹了nodejs之koa2請求示例(GET,POST),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • node?NPM庫qs?iconv-lite字符串編碼轉換及解析URL查詢學習

    node?NPM庫qs?iconv-lite字符串編碼轉換及解析URL查詢學習

    這篇文章主要為大家介紹了node?NPM庫之qs解析URL查詢字符串及iconv-lite字符串編碼轉換學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • npm鏡像源更改后不生效(附淘寶鏡像源)

    npm鏡像源更改后不生效(附淘寶鏡像源)

    淘寶的NPM鏡像源registry.npm.taobao.org已經過期,導致npm?install時出現證書過期錯誤,更換鏡像源至registry.npmmirror.com后,如果仍出現錯誤,可能是項目中的package-lock.json或.npmrc文件鎖定了舊的鏡像源,本文就來介紹一下解決方法,感興趣的可以了解一下
    2024-10-10
  • 有了ChatGPT編程我們還需要使用那么多庫嗎

    有了ChatGPT編程我們還需要使用那么多庫嗎

    這篇文章主要為大家介紹了有了ChatGPT編程我們還需要使用那么多的庫嗎的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Node.js編程中客戶端Session的使用詳解

    Node.js編程中客戶端Session的使用詳解

    這篇文章主要介紹了Node.js編程中客戶端Session的使用詳解,是Node.js入門學習中的基礎知識,需要的朋友可以參考下
    2015-06-06
  • 詳解兩個Node.js進程是如何通信

    詳解兩個Node.js進程是如何通信

    進程間通信是是Node.js的一個十分重要的部分,這篇文章主要給大家介紹了關于兩個Node.js進程是如何通信的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • nodejs教程之異步I/O

    nodejs教程之異步I/O

    nodejs的核心之一就是非阻塞的異步IO,于是想知道它是怎么實現的,經過一份研究,找到些答案,在此跟大家分享下。
    2014-11-11
  • node 標準輸入流和輸出流代碼實例

    node 標準輸入流和輸出流代碼實例

    這篇文章主要介紹了node 標準輸入流和輸出流代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論