可冰

冰,是沉睡着的水......

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  37 随笔 :: 5 文章 :: 94 评论 :: 0 Trackbacks
[以下只是个人的总结,如若有误,恳请指正,谢谢!]
下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号.
U+00000000 - U+0000007F: 0 xxxxxxx 0x - 7x  
U+00000080 - U+000007FF: 110 xxxxx 10 xxxxxx Cx 8x - Dx Bx  
U+00000800 - U+0000FFFF: 1110 xxxx 10 xxxxxx 10 xxxxxx Ex 8x 8x - Ex Bx Bx  
U+00010000 - U+001FFFFF: 11110 xxx 10 xxxxxx 10 xxxxxx 10 xxxxxx F0 8x 8x 8x - F7 Bx Bx Bx 很少用
U+00200000 - U+03FFFFFF: 111110 xx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx F8 8x 8x 8x 8x - FB Bx Bx Bx Bx
U+04000000 - U+7FFFFFFF: 1111110 x 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx FC 8x 8x 8x 8x 8x - FD Bx Bx Bx Bx Bx


* FE FF从未在编码中出现过.
* 除第一个字节外,其余字节都在 0x80 到 0xBF范围内,每个字符的起始位置用0xC0-0xD0,0xE0,0xF0等可以确定(验证前四位或八位),不在这一范围的即为单字节字符.凡是以0x80 到 0xBF开头的都是后继字节,计数时都要跳过.
* Unicode是一种编码表,只将字符指定给某一数字(Unicode做得还要更多一些,比如提供比较及显示等很多算法等等);
而UTF-8是编码方式,是定义如何表示并存储指定编码的格式.
* UTF-8编码转换为Unicode编码: 将所有标志位去除,剩余位数若不足则在高位补零,凑足32位即可.
* Unicode编码转换为UTF-8编码: 从低位开始,每取6位补两个位10,不足6位(不算高位的0)则按字节长度补相应的字符标志位0、110、1110等

posted on 2005-09-19 20:03 可冰 阅读(10333) 评论(3)  编辑 收藏 引用 所属分类: UTF-8

评论

# re: UTF-8 编码格式总结 2005-09-19 20:11 cpunion
FE FF是utf-16-be文件编码的BOM。。。  回复  更多评论
  

# re: UTF-8 编码格式总结 2005-09-19 20:31 可冰
不懂BOM是什么意思?
在UTF-8中它们没出现过,应该是正确的吧.  回复  更多评论
  

# re: UTF-8 编码格式总结 2005-09-19 20:54 cpunion
BOM是Byte Order Mark,在文件头部,标明文件格式。

如果文件头3个字节是EF BB BF,表明这个文件是UTF-8格式
头2个字节是FE FF表明这个文件是UTF-16,Big-Endian
FF FE表明这个文件是UTF-16,Little-Endian

把它们作为BOM,应该也是因为没有出现在编码中。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理