Eclipse修改編碼后亂碼解決


Eclipse用了一段時間,都是用的gbk編碼的,突然想要規范下,強迫症犯了,於是將在Window->Preference->Appearances->Workspace修改Text file encoding為UFT-8,一點擊確認,Oh,My God!中文都亂碼了,一開始想的是用記事本將文件一個一個的另存為UTF-8格式,累死了,發現工程量太大,放棄了,轉戰代碼,下面是可實現的代碼,支持批量處理(即處理一個文件夾內的所有代碼),不支持文件夾下還有文件夾的情況!代碼如下:

package com.tfj.demo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
 * @function 將批量的gbk的亂碼文件轉換到utf8
 *           將gbk的代碼放到srcDir之下,轉碼置destDir之下,不支持srcDir之下有目錄,srcDir目錄與destDir目錄不能一樣
 * @author Jacksile E-mail:tufujietec@foxmail.com
 * @date 2016年1月16日 下午3:02:07
 */
public class UTF8Parser {

    static File srcDir = new File("E:\\eclipse2\\studyall\\src\\com\\tfj\\algorithm"); // 待轉碼的GBK格式文件夾
    static File destDir = new File("E:\\eclipse\\studyall\\src\\com\\tfj\\algorithm"); // 轉碼成UTF8的目標文件夾

    public static void main(String[] args) {
        // 1.判斷是目錄
        if (!srcDir.isDirectory()) {
            return;
        }
        // 2.遍歷所有目錄
        File[] fs = srcDir.listFiles();

        // 創建目標目錄
        if (!destDir.exists()) {
            destDir.mkdirs();
        }

        try {
            new UTF8Parser().parse(fs);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 目錄就迭代遍歷;文件就重編碼
     */
    private void parse(File[] fs) throws IOException {
        for (File file : fs) {
            if (!file.isDirectory()) {
                File destFile = new File(destDir, file.getName());
                parse2UTF_8(file, destFile);
            } else {
                parse(file.listFiles());
            }
        }
    }

    /** 
     */
    private void parse2UTF_8(File file, File destFile) throws IOException {
        StringBuffer msg = new StringBuffer();
        // 讀寫對象
        PrintWriter ps = new PrintWriter(new OutputStreamWriter(new FileOutputStream(destFile,
                false), "utf8"));
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),
                "gbk"));

        // 讀寫動作
        String line = br.readLine();
        while (line != null) {
            msg.append(line).append("\r\n");
            line = br.readLine();
        }
        ps.write(msg.toString());
        br.close();
        ps.flush();
        ps.close();
    }

}

代碼中修改文件夾名,運行,從轉換到的文件夾復制所有文件到原來文件夾,代碼中修改文件夾名。。。反反復復這三步,發現我的文件夾也太多了,這樣也會累個半死,於是只能轉戰轉換工具,網上搜索:gbk轉utf-8軟件,一大堆工具,很多都是支持批量處理,打開工具,選擇一個文件夾(這下可以是任意的,沒有限制,上面代碼還限制文件夾中不能存在文件夾),輕輕松松轉換,這下,編碼問題徹底解決。唯一遺憾的是這樣大批量處理會導致原先是utf-8的文件出現錯誤,所以建議批量處理時文件夾在最大化的情況下避免存在已經是utf-8的文件,否則適當縮小文件夾包含范圍。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM