解決wins VS編譯的文件到xCode亂碼的JS簡單小樣

  • 在iOS混編的時候蔗喂,經(jīng)常會共用跨平臺文件,導入到xcode中高帖,有的格式就可能會識別不了缰儿,就會變成亂碼,比如說GBK散址,GB2312(理論上有的文件xcode是可以識別的)乖阵。為了可以統(tǒng)一轉化這些文件的編碼,所以我就寫了一個node.js的小樣预麸,下面貼出代碼瞪浸。

  • 在轉化之前需要一定的條件
    1.node.js的環(huán)境,網(wǎng)上有很多教程吏祸,安裝環(huán)境很簡單对蒲。
    2.需要 iconv-lite這個插件,輸入npm install iconv-lite就可以安裝了。
    3.敢于嘗試的精神蹈矮。(略略略砰逻,其實我也是試出來的。)

  • 完整代碼

// 文件名 index.js
const fs = require('fs');  
const path = require('path');  
const iconv = require('iconv-lite');

console.log('爬蟲程序開始運行...')
var root = path.join(__dirname)  
readDir(path.join(root)) 
console.log('爬蟲程序結束運行...')

function readDir(subPath){  
    fs.readdir(subPath,function(err,menu){   
        if(!menu)  
            return;  
        menu.forEach(function(ele){   
            fs.stat(subPath+"/"+ele,function(err,info){  
                if(info.isDirectory()){  
                    readDir(subPath+"/"+ele);  
                }else{    
                    // 先判斷后綴名
                    if (isContains(ele, '.h') ||
                        isContains(ele, '.hpp') ||
                        isContains(ele, '.cpp') ||
                        isContains(ele, '.c') ||
                        isContains(ele, '.m') ||
                        isContains(ele, '.mm')) {

                        transStr(subPath, ele)
                    }
                }     
            })  
        })            
    })  
} 

// 判斷是是否包含字符串
function isContains(str, substr) {
    return str.indexOf(substr) >= 0;
}

// 轉化文件中的編碼方式
function transStr(fontPath, subPath) {
    var filePath = path.resolve(fontPath, subPath);  
    console.log("file: " + filePath)

    var data = fs.readFileSync(filePath);  
    var change_data = iconv.decode(data,'gb2312'); 
    var aie = iconv.encode(change_data,'utf8'); 
    
    fs.writeFileSync(filePath, aie);
}
  • 有哪個文件夾中的文件需要轉化泛鸟,那就把這個文件(index.js命名可以隨便)放在哪個文件夾或者是上一層蝠咆,只要在終端中,跳轉到當前的目錄下北滥,然后執(zhí)行node index.js就可以了刚操。

  • 現(xiàn)在我們簡單的分析一下代碼的流程

1. 導入模塊

const fs = require('fs');  
const path = require('path');  
const iconv = require('iconv-lite');
  • 導入需要用到的三個node的模塊,fs是處理文件流的碑韵,path是處理路徑的赡茸,iconv-lite是進行編碼轉化的。

2. 獲取路徑

var root = path.join(__dirname)  
readDir(path.join(root)) 
  • __dirname 獲得當前文件所在目錄的完整目錄名

3. 遍歷所有文件夾中的文件

function readDir(subPath){  
    fs.readdir(subPath,function(err,menu){   
        if(!menu)  
            return;  
        menu.forEach(function(ele){   
            fs.stat(subPath+"/"+ele,function(err,info){  
                if(info.isDirectory()){  
                    readDir(subPath+"/"+ele);  
                }else{    
                    // 先判斷后綴名
                    if (isContains(ele, '.h') ||
                        isContains(ele, '.hpp') ||
                        isContains(ele, '.cpp') ||
                        isContains(ele, '.c') ||
                        isContains(ele, '.m') ||
                        isContains(ele, '.mm')) {

                        transStr(subPath, ele)
                    }
                }     
            })  
        })            
    })  
}
  • 這里是利用遞歸的方式來獲取文件夾的所有目錄的祝闻。
  • fs.readdir(path, [callback(err,files)]) 以異步的方式讀取文件目錄占卧。
  • fs.stat(path, [callback(err, stats)]) 獲取文件信息
  • 在這里加了一個判斷,如果文件的后綴名是.h .hpp .c .cpp .m .mm的的時候联喘,才會進行編碼的轉化华蜒。

4. 轉化文件中的編碼方式

function transStr(fontPath, subPath) {
    var filePath = path.resolve(fontPath, subPath);  
    console.log("file: " + filePath)

    var data = fs.readFileSync(filePath);  
    var change_data = iconv.decode(data,'gb2312'); 
    var aie = iconv.encode(change_data,'utf8'); 
    
    fs.writeFileSync(filePath, aie);
}
  • 最后一部分,才是本文的重點
  • path.resolve([from ...], to) 將參數(shù) to 位置的字符解析到一個絕對路徑里豁遭,這里解析出文件的絕對路徑叭喜。
  • fs.readFileSync(filename, [encoding]) 異步獲取文件中的數(shù)據(jù)。
  • fs.writeFileSync(filename, data, [options]) 異步將數(shù)據(jù)寫入到文件蓖谢。
  • iconv.decode() iconv.encode() 解碼和編碼數(shù)據(jù)的格式捂蕴,這里的gb2312 utf8只是一個例子,還可以替換成其他的格式(比如gbk ISO-8859)闪幽,這個就需要大家們的嘗試精神啥辨,因為有的時候我們也不知道他到底是什么編碼。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末盯腌,一起剝皮案震驚了整個濱河市溉知,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腕够,老刑警劉巖级乍,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帚湘,居然都是意外死亡玫荣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門大诸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崇决,“玉大人材诽,你說我怎么就攤上這事『闵担” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵建邓,是天一觀的道長盈厘。 經(jīng)常有香客問我,道長官边,這世上最難降的妖魔是什么沸手? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮注簿,結果婚禮上契吉,老公的妹妹穿的比我還像新娘。我一直安慰自己诡渴,他們只是感情好捐晶,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妄辩,像睡著了一般惑灵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眼耀,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天英支,我揣著相機與錄音,去河邊找鬼哮伟。 笑死干花,一個胖子當著我的面吹牛,可吹牛的內容都是我干的楞黄。 我是一名探鬼主播池凄,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谅辣!你這毒婦竟也來了修赞?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤桑阶,失蹤者是張志新(化名)和其女友劉穎柏副,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚣录,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡割择,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了萎河。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荔泳。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蕉饼,死狀恐怖,靈堂內的尸體忽然破棺而出玛歌,到底是詐尸還是另有隱情昧港,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布支子,位于F島的核電站创肥,受9級特大地震影響,放射性物質發(fā)生泄漏值朋。R本人自食惡果不足惜叹侄,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昨登。 院中可真熱鬧趾代,春花似錦、人聲如沸丰辣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糯俗。三九已至尿褪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間得湘,已是汗流浹背杖玲。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淘正,地道東北人摆马。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像鸿吆,于是被迫代替她去往敵國和親囤采。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • 一、核心模塊和對象 核心模塊的意義 常用內置模塊path:處理文件路徑fs:操作文件系統(tǒng)child_process...
    EndEvent閱讀 4,406評論 0 1
  • 個人入門學習用筆記思犁、不過多作為參考依據(jù)代虾。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,451評論 1 37
  • Node.js是目前非臣ざ祝火熱的技術棉磨,但是它的誕生經(jīng)歷卻很奇特。 眾所周知学辱,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,607評論 2 41
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,305評論 0 6
  • Node.js 常用工具 util 是一個Node.js 核心模塊乘瓤,提供常用函數(shù)的集合环形,用于彌補核心JavaScr...
    FTOLsXD閱讀 530評論 0 2