Java字符
char
表示Java语言中的字符,是一个char是一个16位(2个字节)的无符号正整数。
由于2个字节的char最大只能表示65535个字符,对于编码超过65535的字符,只能用两个char表示。
char本质上是一个16位的无符号正整数,对应着Unicode的编号,表示这个编号所所对应的字符,
Unicode
char 不等于Unicode字符。
Unicode给世界上每个字符分配了一个编号,编号范围从0x000000到0x10FFFF。编号范围在0x0000到0xFFFF之间的字符,为常用字符集,称BMP(Basic Multilingual Plane)字符。编号范围在0x10000到0x10FFFF之间的字符叫做增补字符(supplementary character)。
Unicode主要规定了编号,但没有规定如果把编号映射为二进制,UTF-16是一种编码方式,或者叫映射方式,它将编号映射为两个或四个字节,对BMP字符,它直接用两个字节表示,对于增补字符,使用四个字节,前两个字节叫高代理项(high surrogate),范围从0xD800到0xDBFF,后两个字节叫低代理项(low surrogate),范围从0xDC00到0xDFFF,UTF-16定义了一个公式,可以将编号与四字节表示进行相互转换。
Java内部采用UTF-16编码,char表示一个字符,但只能表示BMP中的字符,对于增补字符,需要使用两个char表示,一个表示高代理项,一个表示低代理项。
使用int可以表示任意一个Unicode字符,低21位表示Unicode编号,高11位设为0。整数编号在Unicode中一般称为代码点(Code Point),表示一个Unicode字符,与之相对,还有一个词代码单元(Code Unit)表示一个char。
Character
对原子类型char的包装。封装了Unicode级别的各种静态方法。
String
character的序列
getBytes(charset)
对字符串按照指定的字符集进行编码。
String ch = "中";
byte[] b = ch.getBytes("UTF-8");
输出[-28,-72,-83],输出汉字的对应UTF-8编码的字节数组。
String(byte bytes[], String charsetName)
按照指定的字符集进行解码
String ch = "中";
byte[] b = ch.getBytes("UTF-8");
String s = new String(b, "UTF-8");
字符编码的问题
http://www.cnblogs.com/yezhenhan/archive/2011/01/14/1935376.html
UTF-8和iso-8859-1
http://sunwcn.blog.163.com/blog/static/287910802008364178344/
Spring MVC 参数映射