代碼點
Unicode標準的本意很簡單:但願給世界上每一種文字系統的每個字符,都分配一個惟一的整數,這些整數叫作代碼點(Code Points)。java
代碼空間
全部的代碼點構成一個代碼空間(Code Space),根據Unicode定義,總共有1,114,112個代碼點,編號從0x0到0x10FFFF。換句話說,若是每一個代碼點都可以表明一個有效字符的話,Unicode標準最多可以編碼1,114,112,也就是大概110多萬個字符。最新的Unicode標準(7.0)已經給超過11萬個字符分配了代碼點。app
代碼平面
Unicode標準把代碼點分紅了17個代碼平面(Code Plane),編號爲#0到#16。
每一個代碼平面包含65,536(2^16)個代碼點(17*65,536=1,114,112)。
其中,Plane#0叫作基本多語言平面(Basic Multilingual Plane,BMP),其他平面叫作補充平面(Supplementary Planes)。
Unicode7.0只使用了17個平面中的6個,而且給這6個平面起了名字,以下編碼
public String getChineseByunicode(String sunicode) { char a; int len = sunicode.length(); StringBuffer outBuffer = new StringBuffer(len); for (int b = 0; b < len; ) { a = sunicode.charAt(b++); if (a == '\\') { a = sunicode.charAt(b++); if (a == 'u') { int value = 0; for (int i = 0; i < 4; i++) { a = sunicode.charAt(b++); switch (a) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + a - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + 10 + a - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + 10 + a - 'A'; break; default: throw new IllegalArgumentException( "Malformed \\uxxxx encoding."); } } outBuffer.append((char) value); } else { if (a == 't') a = '\t'; else if (a == 'r') a = '\r'; else if (a == 'n') a = '\n'; else if (a == 'f') a = '\f'; outBuffer.append(a); } } else outBuffer.append(a); } return outBuffer.toString(); }