亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Node.js文件編碼格式的轉(zhuǎn)換的方法

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

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

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

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

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);

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

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

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

用到的第三方庫:

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

編碼相關(guān)的基礎(chǔ)知識(shí),可以參考這篇文章: http://chabaoo.cn/article/31045.htm

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    搭建一個(gè)nodejs腳手架的方法步驟

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

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

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

    node?NPM庫qs?iconv-lite字符串編碼轉(zhuǎn)換及解析URL查詢學(xué)習(xí)

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

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

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

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

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

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

    這篇文章主要介紹了Node.js編程中客戶端Session的使用詳解,是Node.js入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • 詳解兩個(gè)Node.js進(jìn)程是如何通信

    詳解兩個(gè)Node.js進(jìn)程是如何通信

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

    nodejs教程之異步I/O

    nodejs的核心之一就是非阻塞的異步IO,于是想知道它是怎么實(shí)現(xiàn)的,經(jīng)過一份研究,找到些答案,在此跟大家分享下。
    2014-11-11
  • node 標(biāo)準(zhǔn)輸入流和輸出流代碼實(shí)例

    node 標(biāo)準(zhǔn)輸入流和輸出流代碼實(shí)例

    這篇文章主要介紹了node 標(biāo)準(zhǔn)輸入流和輸出流代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論