Chinaunix首页 | 论坛 | 博客
  • 博客访问: 518976
  • 博文数量: 137
  • 博客积分: 3170
  • 博客等级: 中校
  • 技术积分: 1455
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-17 11:47
文章分类

全部博文(137)

文章存档

2015年(2)

2013年(1)

2012年(6)

2011年(5)

2010年(62)

2009年(61)

我的朋友

分类: C/C++

2009-09-03 10:59:05

本文删改自------维基百科 

例如,希伯来语字母 aleph(א)的Unicode代码是 U+05D0,按照以下方法改成 UTF-8:

  • 它属于 U+0080到U+07FF区域,这个表说明它使用双字节,110yyyyy 10zzzzzz.
  • 的 0x05D0换算成就是 0000-0101-1101-0000.
  • 这红色11位数按顺序放入"y"部分和"z"部分:11010111 10010000.
  • 最后结果就是双字节,用十六进制写起来就是 0xD7 0x90,这就是这个字符aleph(א)的UTF-8编码。
  • 其他类似。

设计UTF-8的理由

UTF-8的设计有以下的多字符组序列的特质:

  • 单字节字符的永远为0。
  • 多字节序列中的首个字符组的几个决定了序列的长度。最高有效位为110的是2字节序列,而1110的是三字节序列,如此类推。
  • 多字节序列中其余的字节中的首两个最高有效位元为10

UTF-8的这些特质,保证了一个字符的字节序列不会包含在另一个字符的字节序列中。这确保了以字节为基础的部份字串比对(sub-string match)方法可以适用于在文字中搜寻字或词。有些比较旧的可变长度8位元编码(如)没有这个特质,故字串比对的算法变得相当复杂。虽然这增加了UTF-8编码的字串的,但是利多于弊。另外,并非Unicode 的目的,所以不可混为一谈。即使在传送过程中有部份字节因错误或干扰而完全遗失,还是有可能在下一个字符的起点重新同步,令受损范围受到限制。

另一方面,由于其字节序列设计,如果一个疑似为字符串的序列被验证为UTF-8编码,那么我们可以有把握地说它是UTF-8字符串。一段两字节随机 序列碰巧为合法的UTF-8而非ASCII 的机率为32分1。对于三字节序列的机率为256分3,对更长的序列的机率就更低了。


阅读(1044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~