UTF-16 编码简介
来源:互联网 发布:win7网络连接不见了 编辑:程序博客网 时间:2024/04/29 15:07
-- Start
其实, 所谓的编码就是字符和数字之间的映射, 我们把这个数字称为代码点或码位(code point), 码位采用16进制加上前缀U+来表示, 如:A的码位是U+0041.
20世纪80年代, 人们在设计Unicode编码的时候认为, 2个字节16位65536个码位足以将世界上所有语言的字符进行编码, 码位从 U+0000 到 U+FFFF.
随着时间的发展, 在加入大量的中文, 日文和韩文之后, 不可避免的事情发生了, 65536个码位已经不能满足要求了, 所以人们将Unicode的码位从 65536 个扩展到 1114111 个, 码位从 U+0000 到 U+10FFFF.
人们又将这 1114111 个码位划分成17个平面(plane), 每个平面包含 65536 个码位, 每个平面的码位范围从U+xx0000到U+xxFFFF, 其中xx表示十六进制值从00到10,共计17个平面。第一个平面称为基本多文种平面(Basic Multilingual Plane, BMP),或第零平面(Plane 0)。 其他平面称为辅助平面(Supplementary Planes)。
在基本多文种平面內, 从U+D800到U+DFFF之间的码位区段是永久保留不映射到字符, 因此UTF-16巧妙的利用了这保留下来的码位来对辅助平面内的字符进行编码。
在UTF-16中, 辅助平面内的字符被编码为一对16比特长的码元, 称之为代理对(surrogate pair), 第一部分称为高位代理(high surrogate)或前导代理(lead surrogates),码位从U+D800到U+DBFF. 第二部分称为低位代理(low surrogate)或后尾代理(trail surrogates), 码位从U+DC00到U+DFFF.
因此在Java中, 辅助平面内的字符需要一对char来表示, 如果你试图通过一下代码来定义一个char, 编译器会给出错误提示.
char c = '\u10FFFF';你也不要诧异, 为什么我们可以把一个char型变量转换成int型而不需要强制转换, 事实上我们可以通过这种方式来查看它的码位.
char c = '波';int i = c;System.out.println(Integer.toHexString(i));
---更多参见:Java 精萃
-- 声 明:转载请注明出处
-- Last Updated on 2012-04-25
-- Written by ShangBo on 2012-04-25
-- End
- UTF-16 编码简介
- UTF-8编码简介
- UTF-8编码简介
- 字符编码简介:ASCII,Unicode,UTF-8
- Unicode/UTF-8/GBK/ASCII 编码简介
- UTF-16编码
- UTF-16编码详解
- UNICODE编码,UTF-8,UTF-16
- Unicode编码:UTF-8和UTF-16
- UTF-8 UTF-16 Unicode编码资料
- UTF-8、UTF-16、UTF-32之间的编码转换
- UTF-8、UTF-16、UTF-32编码的相互转换
- 字符编码 Unicode UTF-8 UTF-16 UTF-32 ANSI
- UTF-8、UTF-16、UTF-32编码的相互转换
- 编码方式的简介(ASCII, LATIN-1, UTF-8/16/32)
- 再议UTF-16的编码
- JAVA中的UTF-16编码
- 字符编码简介:ASCII,Unicode,UTF-8,GB2312
- ASM is A kind of Sharp Knife for hacker
- windows系统账号(域账号)建立远程链接服务器--图文
- android学习----消息机制
- Struts2处理流程图
- 表达示求值
- UTF-16 编码简介
- VDDQ VDD VCC VSS etc
- 未来可能的转向---网络爬虫
- linux环境下的c++编程之工具篇
- FTP协议相关
- 编写push notification之获取device token
- 给自己一次革命
- AT指令获取基站ID
- 从一道面试题谈linux下fork的运行机制