为了账号安全,请及时绑定邮箱和手机立即绑定

GBK编码文件为什么能在UTF-8平台上正常显示?

GBK编码文件为什么能在UTF-8平台上正常显示?

凤凰求蛊 2018-12-07 09:11:50
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了.不知道那是不是特殊情况,你可以做做实验验证下那,看是不是那样

查看完整回答
反对 回复 2018-12-16
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

utf-8 是国际编码规范,我感觉utf-8是为类似中文文字的所有文字的编码,(例如还包括韩文,日文,以及繁体中文)

而GBK只是文中的编码,所以如果是英文的操作系统,或是其他语言的操作系统,如果用utf-8的话,应该是都能正常显示的,

如果用GBK可能就不一定能正常显示了,

查看完整回答
反对 回复 2018-12-16
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

还是utf-8比较强大,通用性强。做网页一般都用那个编码。

查看完整回答
反对 回复 2018-12-16
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

默认编码跟操作系统有关, window默认就是GBK, JVM默认就取系统编码,so, 只要保证编译时期和运行时期文件、字符编码都一致,就不会出现乱码问题。

查看完整回答
反对 回复 2018-12-16
?
MYYA

TA贡献1868条经验 获得超4个赞

mark

查看完整回答
反对 回复 2018-12-16
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

因为utf-8比GBK高,显示的中文多。

查看完整回答
反对 回复 2018-12-16
  • 7 回答
  • 0 关注
  • 785 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信