通常在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