在昨天的文件读写学习中,针对两个分别用UTF-8和GBK方式保存的文本文件读取时总是出现乱码现象,特意百度了一下JAVA中一些关于编码方式的知识。
Java编译器在对源文件进行编译之前,会将他们统一的转换为Unicode的编码方式,所以我们在编译源文件时一定要准确的告诉编译器源文件的编码方式, 可以用 Java -encoding GBK来进行设置。Java默认的编码方式为UTF-8。
在eclipse的使用中,ecilpse中文件编辑与编译的默认编码方式在XP系统中是随系统的地区语言设置不同而不同的,例如系统的语言设置是中文,则默认编辑与编译都会设为GBK方式,只要他们一致,Eclipse的使用就不会出现问题,也可以在eclipse的设置中对其进行手动修改。
在javaIO的流输入输出当中,我们同样要注意输入输出流的编码设置与用户输入与输出时的设备采用同样的编码方式,JRE在输入输出的时候都会将用户编码方式转换为Unicode,所以我们也需要对输入输出流进行正确的编码方式设置。
如果我们直接使用FileReader/FileWriter将无法针对编码方式进行设置,解决方法为使用FileInputStream/InputStreamReader; FileOutputStream/OutputStreamWriter来进行封装使用,在FileInputStream/FileOutputStream中可以进行编码类型的设置,下面是一个小例子:
package example;
import java.io.*;
public class TestFile {
BufferedReader inUtf =null;
BufferedReader inGB2312 =null;
FileInputStream in =null;
//new FileReader()
try{
in = new FileInputStream("C:\\test\\folder1\\Test\\utf.txt");
inUtf = new BufferedReader(new InputStreamReader(in,"UTF-8"));
//in.reset();
in = new FileInputStream("C:\\test\\folder1\\Test\\GB2312.txt");
inGB2312 = new BufferedReader(new InputStreamReader(in,"GBK"));
}
catch(FileNotFoundException ex){
ex.printStackTrace();
}
catch(UnsupportedEncodingException ex){
ex.printStackTrace();
}
catch(IOException ex){
ex.printStackTrace();
}
char[]s = new char[100];
String temp = new String();
StringBuffer result = new StringBuffer();
String lineSeparator = System.getProperty("line.separator");
try{
//inUtf.read(s);
while((temp=inGB2312.readLine())!=null){
s=temp.toCharArray();
/**
for(int i=0; i<s.length;i++){
System.out.println(s[i]);
}
*/
result.append(temp);
result.append(lineSeparator);
}
System.out.println("UTF:"+result);
//inUtf.read(s);
//System.out.println("GB2312"+s);
}
catch(IOException ex){
ex.printStackTrace();
}
}
}