前些時(shí)候需要把項(xiàng)目中的文本文件都從GBK編碼轉(zhuǎn)換為UTF-8編碼. 如果要手動(dòng)的一個(gè)個(gè)的改, 那可費(fèi)事了. 反正想學(xué)學(xué)Groovy, 就用Groovy做的轉(zhuǎn)換腳本吧.
代碼如下:
在cfg中定義 輸入目錄和輸出目錄
然后遞歸的遍歷目錄中的文件, 用GKB編碼讀進(jìn)來(lái), 再用UTF-8編碼寫出去.
其中有一段
??? byte[]?head?=?[-17,-69,-65]
????of.newOutputStream()?<<?head
因?yàn)閁TF-8編碼有with Signature和without Signature兩種.就是文件開頭的EF BB BF
如果你需要without Signature的就把這兩句去掉.
代碼如下:
def?cfg?=?[
????src?:?'e:\\src',
????out?:?'e:\\out'
];
def?dir?=?new?File(cfg.src);
def?out_dir?=?new?File(cfg.out);
if(!out_dir.exists())?out_dir.mkdirs();
dir.eachFileRecurse{?f?->
??println?f.path
??def?out?=?"${cfg.out}\\${f.path.substring(cfg.out.length())}"
??def?of?=?new?File(out)
??if(f.isDirectory()?&&?!of.exists()){
????of.mkdirs()
??}?else?{
????if(!of.exists()){
??????of.delete();
????}
????of.createNewFile();
????byte[]?head?=?[-17,-69,-65]
????of.newOutputStream()?<<?head
????f.eachLine{?line?->
??????of.append(line+'\n','UTF-8');
????}
??}
}
????src?:?'e:\\src',
????out?:?'e:\\out'
];
def?dir?=?new?File(cfg.src);
def?out_dir?=?new?File(cfg.out);
if(!out_dir.exists())?out_dir.mkdirs();
dir.eachFileRecurse{?f?->
??println?f.path
??def?out?=?"${cfg.out}\\${f.path.substring(cfg.out.length())}"
??def?of?=?new?File(out)
??if(f.isDirectory()?&&?!of.exists()){
????of.mkdirs()
??}?else?{
????if(!of.exists()){
??????of.delete();
????}
????of.createNewFile();
????byte[]?head?=?[-17,-69,-65]
????of.newOutputStream()?<<?head
????f.eachLine{?line?->
??????of.append(line+'\n','UTF-8');
????}
??}
}
在cfg中定義 輸入目錄和輸出目錄
然后遞歸的遍歷目錄中的文件, 用GKB編碼讀進(jìn)來(lái), 再用UTF-8編碼寫出去.
其中有一段
??? byte[]?head?=?[-17,-69,-65]
????of.newOutputStream()?<<?head
因?yàn)閁TF-8編碼有with Signature和without Signature兩種.就是文件開頭的EF BB BF
如果你需要without Signature的就把這兩句去掉.
native2ascii就可以阿
native2ascii可以轉(zhuǎn)換文件編碼嗎?