介绍
历史上有两个独立创立单一字符集的尝试,分别为国际标准化组织(ISO) 的 ISO 10646 项目和Unicode项目,后来两个项目进行了合并、协同工作,但仍保持独立公布各自字符集标准。
国际标准 ISO 10646定义的通用字符集,称为UCS,包括UCS-2和UCS-4两种格式,对应2字节和4字节,UCS-4只是简单追加高位部分而已。
UCS-2格式用于记录基本多语言平面(BMP)的字符编码(Code Point),长度固定为16位,范围为U+0000~U+FFFF,对应于* UTF-16。
UCS-4在UCS-2基础上,追加记录不常用的Supplementary Characters(增补字符),如象形文字等,用于历史科研等领域,长度为32位,当前有效范围为U+000000~U+10FFFF,对应于UTF-32编码。
目前Unicode保持与 ISO 10646 标准的同步兼容,编码空间为U+000000~U+10FFFF(与 ISO 10646 协议后的结果)。
UTF-16是变长表示,使用1-2个16位长码元进行表示,因此可通过组合表示完整的Unicode编码空间,但不兼容ASCII编码(单字节)。
UTF-16使用一个16位码元表示U+0000~U+FFFF区间时,称为基本多语言平面BMP,与UCS-2编码一致,大部分常用字符都在此区间内。
UTF-16使用两个16位码元表示U+10000~U+10FFFF区间时,称为辅助平面,用于记录增补字符。
因此UTF-16实际为UCS-2的超集,但不等同于UCS-4。
Java使用UTF-16表示char字符,使用Unicode形式表示增补字符时,需使用UTF-16组合形式表示,如:uDBFFuDFFF 表示 U+10FFFF
也可使用面向Code Point的API构造,如:
new StringBuilder().appendCodePoint(0x10FFFF).toString();
正则表达式Unicode支持
Swift:
使用NSRegularExpression类,uxxxx 用于2字节的BMP表示, Uxxxxoooo用于4字节的全域表示,上限为U0010FFFF
参考:http://userguide.icu-project.org/strings/regexp
Android:
使用Pattern类,uxxxx 用于2字节的BMP表示,增补字符部分使用UTF-16组合表示,如:uDBFFuDFFF表示U+10FFFF
参考:http://www.oracle.com/us/technologies/java/supplementary-142654.html
Unicode 正则表达式标准手册