解析Unicode编码和Java char
Java的字符类型采用的是UTF-16编码方式对Unicode编码表进行表示。其中一个char类型固定2Bytes(16bits)。首先先介绍一下Unicode编码表和UTF-16编码算法:
Unicode编码表的专业术语:
代码点 (code point): 指在Unicode编码表中一个字符所对应的代码值。如汉字“一”的代码点是U+4E00,英文字母“A”的代码点是U+0041。
代码单元( code unit): 规定16bits的存储容量就是一个代码单元。
Unicode编码表 分为17个代码级别 (code plane),其中代码点\u0000-\uFFFF为第一级别 ——基本多语言级别 (basic multilingual plane),可以用一个代码单元存储一个代码点。其余16个附加级别 从0x10000-0x10FFFF(需要两个代码单元)。其中需要指出的是在多语言级别中,U+D800-U+DFFF这2048值没有表示任何字符,被称为Unicode的替代区域(surrogate area)。UTF-16正是的运用了这一区域,用2个代码单元(2*16bits)巧妙的表示出20bits代码点的Unicode附加级别。
UTF-16编码算法
假设U是一个代码点,也就是Unicode编码表中一个字符所对应的Unicode值。
1) 如果U<U+10000,也就是处于Unicode的基本多语言级别中。这样16bits(一个代码单元)就足够表示出字符的Unicode值。
2) 如果U+10FFFF>U>=U+10000,也就是处于附加级别中。UTF-16用2个16位来表示出了,并且正好将每个16位都控制在替代区域U+D800-U+DFFF 中了,具体操作如下:
分别初始化2个16位无符号的整数 —— W1和W2。其中W1=110110yyyyyyyyyy(0xD800-0xDBFF),W2 = 110111xxxxxxxxxx(0xDC00-OxDFFF)。然后,将U的高10位分配给W1的低10位,将U的低10位分配给W2的低10位。这样就可以将20bits的代码点U拆成两个16bits的代码单元。而且这两个代码点正好落在替代区域U+D800-U+DFFF中。
具体举个例子:代码点U+1D56B(一个整数集的算术符号Z)
0x1D56B=
相关文档:
Java面试中,最常被人问到的几个问题:
1. java.util.*包的UML结构图。
2. Vector和ArrayList、LinkedList区别 Hashtable 和 HashMap之间的区别
3. String、StringBuffer,StringBuilder之间区别。
--回答--
1.
Collection
|
|_List
| |_LinkedList
| | ......
上一篇文章中介绍了怎样利用MSNP登录MSN,在登录后便可取联系人了,很简单。
参考文章:
http://msnpiki.msnfanatic.com/index.php/MSNP13:Contact_List
http://msnpiki.msnfanatic.com/index.php/MSNP15:TicketTokens
在登录后,可以得到一个contacts.msn.com的ticketToken,这可用于后续的验证
一种方法是加入一个MS ......
Java连接mysql数据库,代码经过运行准确无误。
下面为实例---->
用数据库操纵工具(例:SQLyogEnt)操纵mysql建表,或dos下建,如下:
数据库名:scutcs
表名:student
表内容:
sno char[7] NO NULL Primary Key;
sname varchar[8] NO NULL;
sex char[2] NO NULL; ......
原文来自于《Developing Games in Java》,作者:David Brackeen, Bret Barker, Laurence Vanhelsuwé
Java在设计时充分考虑了线程,因此在Java中线程的操作比其他语言要简单。只需生成一个Thread类的实例便可创建一个线程,然后调用start()方法线程就启动了。
&nbs ......
win7系统下Java环境变量的配置 Jdk版本为1.6
打开控制面板->用户帐户->更改我的环境变量
变量名:JAVA_HOME
变量值:D:\Program Files\Java\jdk1.6.0_12(这只是我的JDK安装路径)
变量名:Path
在变量值的最前面加上:%JAVA_HOME%\bin;(若已经有Path项,无须另外新 ......