编码小结3-阿里云开发者社区

开发者社区> 开发与运维> 正文

编码小结3

简介: java中编码问题

看一段代码,了解下java中编码

import java.io.UnsupportedEncodingException;
public class Test{
    public static void main(String[] args)
         throws UnsupportedEncodingException {
        System.out.println(System.getProperty("file.encoding"));    //gbk
        String s = "中文";
        System.out.println(s);
        System.out.println(s.length());
        String t = new String(s.getBytes(),"utf-8");
        System.out.println(t);
        System.out.println(t.length());
    }
}

其中,Test.java源文件是utf-8编码的,系统默认编码是GBK输出结果如下所示:


E:\testencoding>java Test
GBK
涓枃
3
中文
2

我的理解是当用javac Test.java命令时,由于没有指定编码格式,jdk采用系统默认的编码格式将源程序编译成unicode字节码,形成class文件保存。本例中,源文件中的字符串"中文"本来是以utf-8编码保存的一串字节流,但是编译时,按照gbk的格式转换成unicode,因此程序执行时输出s时会乱码,刚好“中文”字符串中两个汉字以utf-8格式保存在文件中,各占用3个字节,而gbk编码格式中这两个汉字各占2个字节,所以将6个字节,按照gbk格式转换成java中的字符串时,长度为3。后面将s先按照当前系统的编码格式(gbk)编码,然后按照utf-8格式解码,这与源文件中最初的"中文"编码、解码一致,不会出现乱码的问题了

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章