tim-wu
备忘: UTF-8的格式
http://www.google.com/search?hl=zh-CN&q=UTF-8+0x7FF&btnG=Google+%E6%90%9C%E7%B4%A2&lr=
java中一个char对应一个int,长度为32bit
而utf-8保存一个char时,长度为1-3个byte,也就是8bit-24bit。
其中code<= 0x7F的,保存为1个byte
(code >= 0x80) && (code <= 0x7FF)的,保存为2个byte
code>0x800的,保存为3个byte
因此lucene中,IndexOutput.writeChars()函数的代码为
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
)));
}
}
}
发表于 2007-09-12 17:19
鹏飞万里
阅读(709)
评论(3)
编辑
收藏
评论
#
re: 备忘: UTF-8的格式
修正一下,还有4 bytes的utf-8字符集
http://www.blogjava.net/tim-wu/archive/2007/12/07/165989.html
#
re: 备忘: UTF-8的格式
从这看出Lucene只支持到了BMP(3 bytes utf-8),估计是因为J2SE 1.4中的字符处理是基于Unicode 3.0标准的。
目前完整的unicode需要4 bytes utf-8才能实现。
参考
http://zh.wikipedia.org/wiki/UTF-8
http://www.blogjava.net/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标准的。
J2SE v 1.5 supports Unicode 4.0 character set.
而:
Unicode 3.0:1999年九月;涵蓋了來自ISO 10646-1的十六位元通用字元集(UCS)基本多文種平面(Basic Multilingual Plane)
Unicode 3.1:2001年三月;新增從ISO 10646-2定義的輔助平面(Supplementary Planes)
#
re: 备忘: UTF-8的格式
补充:
BMP中约定了:
D800-DBFF:High-half zone of UTF-16
DC00-DFFF:Low-half zone of UTF-16
因此UTF-8中约定,D800-DFFF无意义。
当然,这儿lucene的实现是可靠的并且可逆的转换,但它其实使用2个UTF-8来表示本应该用一个4 bytes 来表示的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
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
<
2007年9月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
导航
BlogJava
首页
发新随笔
发新文章
联系
聚合
管理
统计
随笔: 28
文章: 0
评论: 38
引用: 1
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
我参与的团队
WebGIS开发设计组(0/0)
随笔档案
2008年2月 (4)
2008年1月 (6)
2007年12月 (2)
2007年11月 (2)
2007年9月 (8)
2007年3月 (1)
2006年5月 (4)
2006年4月 (1)
搜索
最新评论
1. re: 关于Javascript的内存泄漏问题的整理稿
很有帮助!谢谢
--selma
2. re: 关于Javascript的内存泄漏问题的整理稿
对象是值传递的,所以第一段代码不可能是js对象和dom对象的循环引用,而是dom自身的循环引用
--axiheyhey
3. re: 关于Javascript的内存泄漏问题的整理稿[未登录]
评论内容较长,点击标题查看
--鹏飞万里
4. re: 关于Javascript的内存泄漏问题的整理稿
评论内容较长,点击标题查看
--goofect
5. re: 关于Javascript的内存泄漏问题的整理稿
评论内容较长,点击标题查看
--goofect
阅读排行榜
1. 关于Javascript的内存泄漏问题的整理稿(18515)
2. 关于google map api中的球平投影算法接口: GProjection和GMercatorProjection类(4814)
3. Lucene如何控制segments的数量?(4657)
4. javascript的prototype(2519)
5. Java7 VB2008都开始支持Lambda(Closure)了(2349)
评论排行榜
1. 关于Javascript的内存泄漏问题的整理稿(17)
2. 关于google map api中的球平投影算法接口: GProjection和GMercatorProjection类(7)
3. 备忘: UTF-8的格式(3)
4. Lucene如何控制segments的数量?(3)
5. 复杂度为log(n)的排序堆栈算法(2)