Eclipseインポートプロジェクト、javaファイルの中国語文字化けしの解決策

3004 ワード

他の人のコードを見ていて、困ったことに他の人が書いたプロジェクトをEclipseにインポートしたとき、javaファイルに文字化けしが発生しました.エンジニアリングの元のコードはGBKなので、私はUTF-8のコードを一般的に使っていますが、結果的にコードが一致せず、コードが文字化けしてしまうことがあります.
eclipseでファイルのコードを修正するなど、いくつかの方法を試してみましたが、表示時には文字化けしの問題を解決していましたが、実行時には文字化けしてしまい、私が新しく作ったファイルはUTF-8で、元々導入していたのはGBKなので文字化けしてしまいます.
最も愚かな方法はGBKのファイルをメモ帳で開けて、1つ1つのcopyをeclipseの中に入れて、この方法は実行可能で、符号化の問題を解決することができて、しかし1つのファイルが多くなって、この方法は1件のとても疲れる事です...
一気にプログラムを書いて自動変換符号化を実現する方法を決めたが、実は考えてみると簡単で、手帳を開けて別のUTF-8ファイルにコピーする過程を機械に実現させたにすぎない.
くだらないことは言わないで、直接コードに行きましょう.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ConverEncoding {
	public static void main(String[] args) throws Exception {
		String srcDir = "E:\\mining\\tools\\ictclas4j\\ictclas4j\\src";
		List files = new ArrayList();
		fetchFileList(srcDir, files, ".java");
		for (String fileName : files) {
			convert(fileName, "GBK", fileName, "UTF-8");
		}
	}

	public static void convert(String oldFile, String oldCharset,
			String newFlie, String newCharset) {
		BufferedReader bin;
		FileOutputStream fos;
		StringBuffer content = new StringBuffer();
		try {
			System.out.println(oldFile);
			bin = new BufferedReader(new InputStreamReader(new FileInputStream(
					oldFile), "gbk"));
			String line = null;
			while ((line = bin.readLine()) != null) {
				// System.out.println("content:" + content);
				content.append(line);
				content.append(System.getProperty("line.separator"));
			}
			bin.close();
			File dir = new File(newFlie.substring(0, newFlie.lastIndexOf("\\")));
			if (!dir.exists()) {
				dir.mkdirs();
			}
			fos = new FileOutputStream(newFlie);
			Writer out = new OutputStreamWriter(fos, newCharset);
			out.write(content.toString());
			out.close();
			fos.close();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void fetchFileList(String strPath, List filelist,
			final String regex) {
		File dir = new File(strPath);
		File[] files = dir.listFiles();
		Pattern p = Pattern.compile(regex);
		if (files == null)
			return;
		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				fetchFileList(files[i].getAbsolutePath(), filelist, regex);
			} else {
				String strFileName = files[i].getAbsolutePath().toLowerCase();
				Matcher m = p.matcher(strFileName);
				if (m.find()) {
					filelist.add(strFileName);
				}
			}
		}
	}
}