3.1 Unicode ----Jvm是unicode编码及验证

本文探讨了Java平台如何处理Unicode字符集及其编码方式,特别是UTF-16编码的应用。通过实例演示了如何验证JVM内部使用UTF-16进行字符串存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*Programs are written using the Unicode character set. Information about this character set and its associated character encodings may be found at http://www.unicode.org/.
The Java SE platform tracks the Unicode Standard as it evolves. The precise version of Unicode used by a given release is specified in the documentation of the class Character.*
这里的编码是指jvm的运行时期的编码为unicode。unicode默认是16bit。java使用的是unicode16编码。java的编码是统一的,具体t体现是加载到内存统一。
注意:Unicode只是一个符号集,他只规定数据是按何种规则存储(unicode有多中存储方式)。utf-8是unicode一个实现,他指定了对应的值映射的内容。
java的编码(class)是取决于运行环境的编码,如果系统是xp可能就是gbk,windows可能是utf-8,ubuntu可能是unicode,这里的编码。
如何证明jvm是utf-16?
思路:取出一个字符的字节码表示,将这个字符转换成某个格式,然后再取其直接码表示,如果两个字节码相等,则说明该字符是这个格式

public static String byteToBinary(byte src) {
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < 8; i++) {​
        result.append(src%2 == 0 ? '0' : '1');
        src = (byte)(src >>> 1);
    }
    return result.reverse().toString();
}

public static void main(String[] args) throws UnsupportedEncodingException {
    String str = "测试运行时string的编码";
    byte[] utf16 = str.getBytes("UTF-16");  //一个byte等于8个字节
    System.out.println(Arrays.toString(utf16));
    for (int i = 0; i < str.length(); i++) {
        System.out.println(str.charAt(i));  //输入当前字节
        byte high = (byte)(str.charAt(i) >>> 8);  //转换前8位
        byte low = (byte) str.charAt(i);    //转换前后8位
        System.out.println(byteToBinary(high) + byteToBinary(low));
        System.out.println(byteToBinary(utf16[2+2*i]) + byteToBinary(utf16[2+2*i+1]));    //转换后16位
        System.out.println((byteToBinary(high) + byteToBinary(low)).equals(byteToBinary(utf16[2+2*i]) + byteToBinary(utf16[2+2*i+1])));//相等则说明是utf-16
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值