posts - 82, comments - 269, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

UNICODE的一点理解

Posted on 2006-11-12 18:17 itspy 阅读(1744) 评论(3)  编辑  收藏 所属分类: 其它技术
看了好多UNICODE的标准了,经常在不同的地方看到不一致的说法,现在把我的理解写下来。

请大家最好带着批判的眼光来看,里面可能有很多错误,不要误了大家,下面列出了很多参考文献。如果发现了错误,请大家指出或讨论。

1)UNICODE定义的字符集,刚开始只准备用16位,可是好像不够用,因为16位最多只能容纳6万多个字符,后来就扩展到32位了(好像实际上只有31位,最高位不用,永远为0)

2)UTF-8是UNICODE的一种编码形式,由于Unicode开始只准备用16位来表示所有字符,所以一般情况下UTF8编码也只会出现1-3个字节,但实际上它可以支持到6个字节(但是6个字节有一些保留位,真正有效的位也就刚好只有32,刚好容纳UNICODE字符集。  后面附UTF-8的详细编码方式,可以看出为什么6个字节,有效位只有32位。

3)平常所说的UNICODE编码指的是UTF-16, 它使用16位,或者是32位来表示一个字符。UTF-16与UTF-8类似,只是跨步使用了2个字节,而不是UTF-8的一个字节了(也就是要么2个字节,要么4个字节,不可能出现1个或者3个字节的编码)。当然如果用UTF-16这种编码方式,文件必需要以一定的方式在开头申明使用了这种方式,如何申明就不说了,这方面的资料网上很多,并且非常一致。

4)UTF-32就没什么好说的了,网上资料写的很明白,就是直接用一个32位来表示UNICODE。UTF-32与UTF-16一样,他也要在文件的开头以一定的方式来申明它使用了UTF-16编码,要不然就不能正确解码了。

  计算机编码大全(强烈推荐) http://www.cppblog.com/oosky/archive/2005/12/13/1723.aspx

http://bbs.netton.cn/ShowPost.asp?ThreadID=1906

http://iask.sina.com.cn/b/3798538.html

http://www.matrix.org.cn/thread.shtml?topicId=34590&forumId=19

http://www.ismayday.com/article.asp?id=61

http://www.cppblog.com/liangbo/archive/2006/04/23/6103.html

http://dev.csdn.net/article/35/35305.shtm

http://support.uufriend.com/blog/tom/99220.htm

http://spaces.msn.com/iamtin/Blog/cns!1pvp_euYfEkmt-djP-0RlwBw!302.entry

http://news.onlinedown.net/info/13164-1.htm

http://www.linuxfans.org/nuke/modules.php?name=News&file=article&op=view&sid=1749


UTF-8的编码方式

U-00000000 - U-0000007F:  0xxxxxxx  
U-00000080 - U-000007FF:  110xxxxx 10xxxxxx  
U-00000800 - U-0000FFFF:  1110xxxx 10xxxxxx 10xxxxxx  
U-00010000 - U-001FFFFF:  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  
U-00200000 - U-03FFFFFF:  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
U-04000000 - U-7FFFFFFF:  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 


注:原来发表于http://bbs.xml.org.cn/dispbbs.asp?boardID=1&replyID=41780&ID=32741&skin=1.
但由于一些原因,我上此站点有些慢,就转放于此


评论

# re: UNICODE的一点理解  回复  更多评论   

2006-11-12 21:23 by jiangsukid
16个字节,或者是32个字节来
是16个bit, 2个字节?
笔误吗?

# re: UNICODE的一点理解  回复  更多评论   

2006-11-12 22:12 by itspy
@jiangsukid
谢谢你的提醒,我写错了.

应该是16位,或者是32位.我马上去修改

# re: UNICODE的一点理解  回复  更多评论   

2006-11-14 12:33 by Dennis
Unicode 3.0 版本, 實際上只需要 21 bits 就能表達所有字
即使用 UTF-32 時, 也只會用去其中 21 bits
http://www.unicode.org/faq/utf_bom.html




只有注册用户登录后才能发表评论。


网站导航: