首页 > 代码库 > Eclipse编码问题

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修改默认编码---------------

UTF-8

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

 

UTF-8

 

Eclipse编码问题