http://www.google.com/search?hl=zh-CN&q=UTF-8+0x7FF&btnG=Google+%E6%90%9C%E7%B4%A2&lr=
java中一個(gè)char對(duì)應(yīng)一個(gè)int,長(zhǎng)度為32bit
而utf-8保存一個(gè)char時(shí),長(zhǎng)度為1-3個(gè)byte,也就是8bit-24bit。
其中code<= 0x7F的,保存為1個(gè)byte
(code >= 0x80) && (code <= 0x7FF)的,保存為2個(gè)byte
code>0x800的,保存為3個(gè)byte
因此lucene中,IndexOutput.writeChars()函數(shù)的代碼為
public void writeChars(String s, int start, int length) throws IOException {
final int end = start + length;
for (int i = start; i < end; i++) {
final int code = (int) s.charAt(i);
if (code >= 0x01 && code <= 0x7F)
writeByte((byte) code);
else if (((code >= 0x80) && (code <= 0x7FF)) || code == 0) {
writeByte((byte) (0xC0 | (code >> 6)));
writeByte((byte) (0x80 | (code & 0x3F)));
} else {
writeByte((byte) (0xE0 | (code >>> 12)));
writeByte((byte) (0x80 | ((code >> 6) & 0x3F)));
writeByte((byte) (0x80 | (code & 0x3F)));
}
}
}
java中一個(gè)char對(duì)應(yīng)一個(gè)int,長(zhǎng)度為32bit
而utf-8保存一個(gè)char時(shí),長(zhǎng)度為1-3個(gè)byte,也就是8bit-24bit。
其中code<= 0x7F的,保存為1個(gè)byte
(code >= 0x80) && (code <= 0x7FF)的,保存為2個(gè)byte
code>0x800的,保存為3個(gè)byte
因此lucene中,IndexOutput.writeChars()函數(shù)的代碼為
















http://www.aygfsteel.com/tim-wu/archive/2007/12/07/165989.html
目前完整的unicode需要4 bytes utf-8才能實(shí)現(xiàn)。
參考
http://zh.wikipedia.org/wiki/UTF-8
http://www.aygfsteel.com/tim-wu/archive/2008/01/25/177788.html
另:
Java 1.0 supports Unicode version 1.1.
Java 1.1 onwards supports Unicode version 2.0.
J2SE 1.4中的字符處理是基于Unicode 3.0標(biāo)準(zhǔn)的。
J2SE v 1.5 supports Unicode 4.0 character set.
而:
Unicode 3.0:1999年九月;涵蓋了來(lái)自ISO 10646-1的十六位元通用字元集(UCS)基本多文種平面(Basic Multilingual Plane)
Unicode 3.1:2001年三月;新增從ISO 10646-2定義的輔助平面(Supplementary Planes)
BMP中約定了:
D800-DBFF:High-half zone of UTF-16
DC00-DFFF:Low-half zone of UTF-16
因此UTF-8中約定,D800-DFFF無(wú)意義。
當(dāng)然,這兒lucene的實(shí)現(xiàn)是可靠的并且可逆的轉(zhuǎn)換,但它其實(shí)使用2個(gè)UTF-8來(lái)表示本應(yīng)該用一個(gè)4 bytes 來(lái)表示的UTF-8符,也就是輔助平面的字符
BMP
http://zh.wikipedia.org/w/index.php?title=%E5%9F%BA%E6%9C%AC%E5%A4%9A%E6%96%87%E7%A8%AE%E5%B9%B3%E9%9D%A2&variant=zh-cn
輔助平面
http://zh.wikipedia.org/wiki/%E8%BE%85%E5%8A%A9%E5%B9%B3%E9%9D%A2