wins VS 컴 파일 된 파일 부터 xCode 난 장 판 까지 해결 하 는 JS 간단 한 샘플

5101 단어
  • iOS 를 혼합 편집 할 때 크로스 플랫폼 파일 을 자주 공유 하고 xcode 에 가 져 오 면 어떤 형식 은 식별 하지 못 하고 난 코드 가 될 수 있다. 예 를 들 어 GBK GB2312 (이론 적 으로 어떤 파일 은 xcode 가 식별 할 수 있다).이 파일 들 의 인 코딩 을 통일 적 으로 바 꿀 수 있 도록 저 는 node.js 샘플 을 썼 고 아래 에 코드 를 붙 였 습 니 다.
  • 전환 하기 전에 일정한 조건 이 필요 하 다. 1. node.js 의 환경 은 인터넷 에 많은 튜 토리 얼 이 있 고 설치 환경 이 간단 하 다.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 의 이름 을 마음대로) 어느 폴 더 나 윗 층 에 놓 고 터미널 에서 현재 디 렉 터 리 로 이동 한 다음 node index.js 을 실행 하면 됩 니 다.
  • 이제 코드 의 절 차 를 간단하게 분석 해 봅 시다
  • 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) 인자 to 위치의 문 자 를 절대 경로 로 분석 하고 파일 의 절대 경 로 를 분석 합 니 다.
  • fs.readFileSync(filename, [encoding]) 비동기 로 파일 의 데 이 터 를 가 져 옵 니 다.
  • fs.writeFileSync(filename, data, [options]) 비동기 로 데 이 터 를 파일 에 기록 합 니 다.
  • iconv.decode() iconv.encode() 디 코딩 과 인 코딩 데이터 의 형식 입 니 다. 여기 gb2312 utf8 는 하나의 예 일 뿐 다른 형식 (예 를 들 어 gbk ISO-8859 으로 바 꿀 수 있 습 니 다. 이것 은 여러분 의 시도 정신 이 필요 합 니 다. 왜냐하면 가끔 은 우리 도 그 가 도대체 어떤 인 코딩 인지 모 르 기 때 문 입 니 다.
  • 좋은 웹페이지 즐겨찾기