Eclipse编码问题

通常在Eclipse下,mac和windows编码是不一样的。如果含有中文java sources通常会出现乱码。 

解决---小程序!

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;

public class CharEncodingExchange {

	private final static String SOURCE_ENCODING = "EUC-CN";

	private final static String TARGET_ENCODING = "UTF-8";

	private static String SOURCE_DIR = "/Users/pandans/Desktop/CoastalBank/src";

	private static String TARGET_DIR = "/Users/pandans/Desktop/tmp";

	/**
	 * 
	 * @param args
	 */

	public static void main(String[] args) {

		// TODO Auto-generated method stub

		try {

			exchange(SOURCE_DIR);

		} catch (Exception e) {

			// TODO Auto-generated catch blockXj

			e.printStackTrace();

		}

	}

	/**
	 * 
	 * exchange the character encoding from srcDir to targetDir
	 * 
	 *
	 * 
	 * @param srcDir
	 * 
	 * @param targetDir
	 */

	public static void exchange(String srcDir) {

		String absPath = "";

		if (!srcDir.equals(SOURCE_DIR)) {

			absPath = srcDir.substring(SOURCE_DIR.length());

			String targetDir = TARGET_DIR + absPath;

			File targetDirectory = new File(targetDir);

			if (targetDirectory.isDirectory() && !targetDirectory.exists()) {

				targetDirectory.mkdirs();

			}

		}

		File sourceDirectory = new File(srcDir);

		if (sourceDirectory.exists()) {

			if (sourceDirectory.isFile()) {

				String targetFilePath = TARGET_DIR + absPath;

				try {

					fileEncodingExchange(sourceDirectory, targetFilePath);

				} catch (IOException e) {

					// TODO Auto-generated catch block

					e.printStackTrace();

				}

			} else {

				File[] childs = sourceDirectory.listFiles();

				for (File child : childs)

					exchange(child.getPath());

			}

		}

	}

	private static void fileEncodingExchange(File infile,

	String targetAbsFilePath) throws IOException {

		FileInputStream fin = null;

		FileOutputStream fout = null;

		FileChannel fcin = null;

		FileChannel fcout = null;

		System.out.println(infile + " " + targetAbsFilePath);

		String tmpTargetPath = targetAbsFilePath.substring(0, targetAbsFilePath

		.lastIndexOf(File.separator));

		File tmpTargetDir = new File(tmpTargetPath);

		if (!tmpTargetDir.exists())

			tmpTargetDir.mkdirs();

		try {

			fin = new FileInputStream(infile);

			fout = new FileOutputStream(targetAbsFilePath);

			fcin = fin.getChannel();

			fcout = fout.getChannel();

			ByteBuffer buffer = ByteBuffer.allocateDirect(1024);

			while (true) {

				buffer.clear();

				int r = fcin.read(buffer);

				if (r == -1) {

					break;

				}

				buffer.flip();

				String encoding = System.getProperty("file.encoding");

				fcout.write(ByteBuffer.wrap(Charset.forName(encoding).decode(

				buffer).toString().getBytes(TARGET_ENCODING)));

			}

		} catch (FileNotFoundException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		} catch (IOException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		} finally {

			if (fin != null) {

				fin.close();

			}

			if (fcin != null) {

				fcin.close();

			}

			if (fout != null)

				fout.close();

			if (fcout != null)

				fcout.close();

		}

	}

}

 自己修改路径。

命令行下运行

编译。

javac CharEncodingExchange.java

运行:

java CharEncodingExchange

先把工程编码变成想要的编码。这里是UTF-8

把tmp的文件覆盖到工程src下。

--------------Eclipse修改默认编码---------------

Eclipse编码问题

UTF-8

这个修改了整个工程会自动变。

Eclipse编码问题

UTF-8