一直在努力
分类: WINDOWS
2010-08-25 14:13:43
unicode 定义范围:
1. BMP(Basic Multilingual Plane):0x0-0xFFFD(前16bit)集中了大多现代书写系统
2. SMP(Supplementary Mulitilingual Plane):0x10000-0x1FFFD 包括了大多在历史上曾经使用的书写系统
3. SIP(Supplementary Ideographic Plane):0x20000-0x2FFFD 用于每年新增加的象形文字
4. SSP(Supplementary Special-Purpose Plane):0xE0000-0xEFFFD 存放一些争议性比较大的字符(语义上比较模糊或者会给文字处理带来麻烦)
5. 保留区:0xF0000-0xFFFFD & 0x100000-0x10FFFD 任何人都可以私自定义这个区域
Note: 特殊字符编号0xFEFF是BOM(Byte Order Mark),包括它对判断Byte Order有特殊用途,所以它的另外一面0xFFFE也就被规定为非Unicode字符
对于超过16bit的unicode,USC2的处理方法(参考UTF-16, an encoding of ISO 10646):
只保留低16位信息,忽略高5位的信息。
解决方法是在BMP中划分出两个保留区域,分别是0xD800-0xDBFF的High Surrogate Area和0xDC00-0xDFFF的Low Surrogate Area。编码方案是,假如有一个大于0xFFFF的co
low = ((ch - 0x00010000) & 0x3FF) + 0xDC00;
hi = (((ch - 0x00010000) & 0xFFFFFC00) >> 10) + 0xD800;
refernce:
1. unicode 官网:
2. 复杂的unicode:http://www.blogjava.net/pts/archive/2009/07/20/287506.html
3. UTF-16, an encoding of ISO 10646: