char
表示Java語(yǔ)言中的字符,是一個(gè)char是一個(gè)16位(2個(gè)字節(jié))的無(wú)符號(hào)正整數(shù)。
由于2個(gè)字節(jié)的char最大只能表示65535個(gè)字符,對(duì)于編碼超過(guò)65535的字符,只能用兩個(gè)char表示。
char本質(zhì)上是一個(gè)16位的無(wú)符號(hào)正整數(shù),對(duì)應(yīng)著Unicode的編號(hào),表示這個(gè)編號(hào)所所對(duì)應(yīng)的字符,
Unicode
char 不等于Unicode字符。
Unicode給世界上每個(gè)字符分配了一個(gè)編號(hào),編號(hào)范圍從0x000000到0x10FFFF。編號(hào)范圍在0x0000到0xFFFF之間的字符,為常用字符集,稱BMP(Basic Multilingual Plane)字符。編號(hào)范圍在0x10000到0x10FFFF之間的字符叫做增補(bǔ)字符(supplementary character)。
Unicode主要規(guī)定了編號(hào),但沒有規(guī)定如果把編號(hào)映射為二進(jìn)制,UTF-16是一種編碼方式,或者叫映射方式,它將編號(hào)映射為兩個(gè)或四個(gè)字節(jié),對(duì)BMP字符,它直接用兩個(gè)字節(jié)表示,對(duì)于增補(bǔ)字符,使用四個(gè)字節(jié),前兩個(gè)字節(jié)叫高代理項(xiàng)(high surrogate),范圍從0xD800到0xDBFF,后兩個(gè)字節(jié)叫低代理項(xiàng)(low surrogate),范圍從0xDC00到0xDFFF,UTF-16定義了一個(gè)公式,可以將編號(hào)與四字節(jié)表示進(jìn)行相互轉(zhuǎn)換。
Java內(nèi)部采用UTF-16編碼,char表示一個(gè)字符,但只能表示BMP中的字符,對(duì)于增補(bǔ)字符,需要使用兩個(gè)char表示,一個(gè)表示高代理項(xiàng),一個(gè)表示低代理項(xiàng)。
使用int可以表示任意一個(gè)Unicode字符,低21位表示Unicode編號(hào),高11位設(shè)為0。整數(shù)編號(hào)在Unicode中一般稱為代碼點(diǎn)(Code Point),表示一個(gè)Unicode字符,與之相對(duì),還有一個(gè)詞代碼單元(Code Unit)表示一個(gè)char。
Character
對(duì)原子類型char的包裝。封裝了Unicode級(jí)別的各種靜態(tài)方法。
String
character的序列
getBytes(charset) 對(duì)字符串按照指定的字符集進(jìn)行編碼。
String ch = "中";
byte[] b = ch.getBytes("UTF-8");
輸出[-28,-72,-83],輸出漢字的對(duì)應(yīng)UTF-8編碼的字節(jié)數(shù)組。
String(byte bytes[], String charsetName)
按照指定的字符集進(jìn)行解碼
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 參數(shù)映射