最早学习Java的时候,老师会告诉我们。
Java中的字符是用Unicode编码的。Unicode编码每个字符占两个字节。
老师说的对,但是介绍的并不够全面和准确。
简单点来说,Unicode编码系统分为编码和实现。
编码指的是,每个字符对应的Unicode码是唯一确定的,Unicode用两个字节表示一个字符。
Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。相信大家都应该知道utf-8,utf-16,utf-32等等的吧。
因为,在实际操作中(如:传输,存储),我们因为一些特殊的要求(提高性能)。对Unicode会有很多种实现方式。
举一个小小的例子
例如,如果一个仅包含基本7位ASCIII字符的Unicode文件,如果每个字符都使用2字节的原Unicode编码传输,其第一字节的8位始终为0。这就造成了比较大的浪费。对于这种情况,可以使用UTF-8编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他Unicode字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。这样对以7位ASCII字符为主的西文文档就大大节省了编码长度
因为Java中char型占两个字节,JVM对Unicode的实现应该是UTF-16吧,具体大端序,小端序应该跟平台有关(个人猜测)。
上面是一些基础知识的普及,下面就比较娱乐了。
Java中支持对Unicode的转义
格式为\u+四位十六进制数。
如a的Unicode编码为0061
那么System.out.println("\u0061");就会输出a
那么如何知道一个字符的Unicode码呢?
char c = '持'; System.out.println(Integer.toHexString(c));
那么如何知道某个Unicode码是什么字符呢?System.out.println((char)Integer.parseInt("6301", 16));
挺有意思吧?
Java与Unicode
最新推荐文章于 2024-05-05 20:41:48 发布