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; } }
这个结果符合预期,因为文件本身是GBK编码的,使用UTF-8运行会出现乱码,但这个class文件ftp到Linux下运行的结果就比较奇怪了:
前面出现那种情况是因为你的文件的编码方式是GBK,所以改为utf-8就会出错。第二种情况有可能是你linux系统下的默认格式是utf-8,当你把GBK编码的文件导入时,GBK格式自动转换为了utf-8。eclipse挺智能的,今天就有那感觉。我的myeslipse的编码是utf-8的,由于我的eclipse的编码是GBK,当我把项目导入到eslipse中时,项目的文件就自动变成GBK了.不知道那是不是特殊情况,你可以做做实验验证下那,看是不是那样
utf-8 是国际编码规范,我感觉utf-8是为类似中文文字的所有文字的编码,(例如还包括韩文,日文,以及繁体中文)
而GBK只是文中的编码,所以如果是英文的操作系统,或是其他语言的操作系统,如果用utf-8的话,应该是都能正常显示的,
如果用GBK可能就不一定能正常显示了,
还是utf-8比较强大,通用性强。做网页一般都用那个编码。
默认编码跟操作系统有关, window默认就是GBK, JVM默认就取系统编码,so, 只要保证编译时期和运行时期文件、字符编码都一致,就不会出现乱码问题。
mark
因为utf-8比GBK高,显示的中文多。
因为gbk与utf8都向下兼容ASCII,如果文件内容仅包含常见的拉丁字母与符号,那么你当它是gbk还是utf8编码都不会错。