1. 基本定义
-
char类型的值可以表示为十六进制值,其范围从 \u0000 到 \uffff,由两个字节构成。
-
char类型原本用于表示单个字符,但是现在情况有所变化,有些Unicode字符需要一个char值描述,有些需要两个char值描述。
2. Unicode与char类型
Java设计时采用了16位的Unicode字符集,但是后来 Unicode字符超过了65536个,所以16位的char无法描述所有Unicode字符。
先介绍几个基本概念:
码点code point:是指与一个编码表中的某个字符对应的代码值
在Unicode中可以将码点分成17个代码级别,第一个代码级别成为基本的多语言级别,码点从U+0000到U+FFFF。其他16个级别码点从U+10000到U+10FFFF,包括一些辅助字符。
代码单元code unit:
UTF-16采用不同长度的编码表示所有的Unicode码点,在基本的多语言级别中,每个字符用16位表示,称为代码单元
而 Java语言解决这个问题的基本方法是:
对于基本多语言级别的码点,使用一个代码单元表示。
对于其他16个级别的码点,使用两个连续的代码单元表示。
Java中的char类型描述了UTF-16编码中的一个代码单元