• Java的字符编码

    想到这个问题的缘由是如下这段代码:

        String inputStr = "abc";
        byte[] input = inputStr.getBytes();
        System.out.println(input.length);
    

    按照我的常识,Java的String类使用的是utf-16编码。在BMP平面的字符都是可以使用两个字节表示的,四个字节的情况并不常见。对于例子中的inputStr,它应该占用六个字节的存储空间。但是这段程序的执行结果是3。

    这是为什么呢?原来String类还有一个getBytes(String charset)方法。直接调用String.getBytes()相当于调用String.getBytes(Charset.getDefaultCharset())。在中文操作系统下,一般的默认编码都是GBK。

    首先需要明确的是,中文编码GB18030GBKGB2312ASCII,这里的大于号是兼容包含的含义。在三个中文编码标准中,除了128个ASCII是一个字节外,其他都是两个字节。所以中文编码严格算来也是变长编码格式。然而这些中文… 【查看更多】