CharSetTest.java文件内容如下,在Windows下编译为class文件。
import java.nio.charset.Charset;
import java.io.OutputStreamWriter;
import java.io.ByteArrayOutputStream;
public class CharSetTest {
public static void main(String[] args) {
System.out.println("Default Charset=" + Charset.defaultCharset());
System.setProperty("file.encoding", "Latin-1");
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("Default Charset in Use=" + getDefaultCharSet());
System.out.println("Default 字符集(在使用中的)=" + getDefaultCharSet());
}
private static String getDefaultCharSet() {
OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream());
String enc = writer.getEncoding();
return enc;
}
}
首先在本地Windows上运行:
D:\Apps\Java\jdk1.6.0_35\jre\bin\java.exe CharSetTestDefault Charset=GBKfile.encoding=Latin-1Default Charset=GBKDefault Charset in Use=GBKDefault 字符集(在使用中的)=GBK
D:\Apps\Java\jdk1.6.0_35\jre\bin\java.exe -Dfile.encoding=GBK CharSetTest
Default Charset=GBKfile.encoding=Latin-1Default Charset=GBKDefault Charset in Use=GBKDefault 字符集(在使用中的)=GBK
D:\Apps\Java\jdk1.6.0_35\jre\bin\java.exe -Dfile.encoding=UTF-8 CharSetTestDefault Charset=UTF-8file.encoding=Latin-1Default Charset=UTF-8Default Charset in Use=UTF8Default 瀛楃闆嗭紙鍦ㄤ娇鐢ㄤ腑鐨勶級=UTF8
这个结果符合预期,因为文件本身是GBK编码的,使用UTF-8运行会出现乱码,但这个class文件ftp到Linux下运行的结果就比较奇怪了:
/opt/jdk1.6.0_35/bin/java CharSetTest
Default Charset=UTF-8file.encoding=Latin-1Default Charset=UTF-8Default Charset in Use=UTF8Default 字符集(在使用中的)=UTF8
/opt/jdk1.6.0_35/bin/java -Dfile.encoding=GBK CharSetTest
Default Charset=GBKfile.encoding=Latin-1Default Charset=GBKDefault Charset in Use=GBKDefault ؖ·՚ʹԃאµģ©=GBK
/opt/jdk1.6.0_35/bin/java -Dfile.encoding=UTF-8 CharSetTestDefault Charset=UTF-8file.encoding=Latin-1Default Charset=UTF-8Default Charset in Use=UTF8Default 字符集(在使用中的)=UTF8
为什么指定为GBK会出现乱码,使用UTF-8反而不会?
7 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
前面出现那种情况是因为你的文件的编码方式是GBK,所以改为utf-8就会出错。第二种情况有可能是你linux系统下的默认格式是utf-8,当你把GBK编码的文件导入时,GBK格式自动转换为了utf-8。eclipse挺智能的,今天就有那感觉。我的myeslipse的编码是utf-8的,由于我的eclipse的编码是GBK,当我把项目导入到eslipse中时,项目的文件就自动变成GBK了.不知道那是不是特殊情况,你可以做做实验验证下那,看是不是那样
蓝山帝景
TA贡献1843条经验 获得超7个赞
utf-8 是国际编码规范,我感觉utf-8是为类似中文文字的所有文字的编码,(例如还包括韩文,日文,以及繁体中文)
而GBK只是文中的编码,所以如果是英文的操作系统,或是其他语言的操作系统,如果用utf-8的话,应该是都能正常显示的,
如果用GBK可能就不一定能正常显示了,
慕雪6442864
TA贡献1812条经验 获得超5个赞
默认编码跟操作系统有关, window默认就是GBK, JVM默认就取系统编码,so, 只要保证编译时期和运行时期文件、字符编码都一致,就不会出现乱码问题。
添加回答
举报
0/150
提交
取消