요약:
최근 매뉴얼을 작성하다가 파일을 확인해보니 파일 인코딩이 잘못된 것을 발견했습니다. 총 100개 이상의 파일이 있었습니다. utf8로서 그것은 비극적일 것입니다. 그래서 파일 인코딩 형식을 일괄적으로 수정하는 프로그램을 작성했습니다.
코드:
/**
* 파일 인코딩 형식을 수정하세요(예: GBK에서 UTF8로
)
* 다중 레벨 디렉토리 지원
* @param {String} [root_path] [트랜스코딩이 필요한 파일 경로]
* @param {Array} [file_type] [html 파일 등 트랜스코딩이 필요한 파일 형식]
* @param {String} [from_code] [파일 인코딩]
* @param {String} [to_code] [파일의 대상 인코딩]
*/
//패키지 소개
var fs = require('fs'),
iconv = require('iconv-lite');
//전역변수
var root_path = './html',
File_type = ['html', 'htm'],
From_code = 'GBK',
to_code = 'UTF8';
/**
* 요소가 배열에 있는지 확인
* @날짜 2015-01-13
* @param {[String]} elem [찾을 요소]
* @return {[bool]} [설명]
*/
Array.prototype.inarray = 함수(요소) {
"엄격한 사용";
var l = this.length;
동안 (l--) {
If (this[l] === elem) {
true를 반환합니다.
}
}
false를 반환합니다.
};
/**
* 트랜스코딩 기능
* @날짜 2015-01-13
* @param {[String]} root [인코딩 파일 디렉터리]
* @return {[유형]} [설명]
*/
함수 encodeFiles(루트) {
"엄격한 사용";
var 파일 = fs.readdirSync(root);
files.forEach(함수(파일) {
var 경로명 = 루트 '/' 파일,
stat = fs.lstatSync(경로명);
If (!stat.isDirectory()) {
var 이름 = file.toString();
If (!file_type.inarray(name.substring(name.lastIndexOf('.') 1))) {
반품;
}
fs.writeFile(경로 이름, iconv.decode(fs.readFileSync(경로 이름), from_code), {
인코딩: to_code
}, 함수(err) {
만약 (오류) {
오류를 던졌습니다.
}
});
} 그 밖의 {
encodeFiles(경로명);
}
});
}
encodeFiles(root_path);
요약:
위 프로그램은 다중 레벨 디렉토리를 지원하며 동일한 파일을 여러 번 작동할 수 없습니다. 그렇지 않으면 잘못된 문자가 나타납니다.
전체 코드: https://github.com/baixuexiyang/coding, 자신의 계정으로 포크할 수 있습니다. 버그가 있는 경우 문제를 신고해 주세요.
정말 좋지 않나요? 궁금한 점이 있으시면 메시지를 남겨주세요.