首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

UTF-八

2013-11-09 
UTF-8UTF-8UTF-8 (8 位元 ?但为了与以前的ASCII码相容(ASCII为一个字节),因此 UTF-8 选择了使用可变长度字

UTF-8
UTF-8

UTF-8 (8 位元

?

但为了与以前的ASCII码相容(ASCII为一个字节),因此 UTF-8 选择了使用可变长度字节来储存 Unicode:

?

?

Unicode和UTF-8之间的转换关系表 UCS-4编码UTF-8字节流U-00000000 – U-0000007F:0xxxxxxxU-00000080 – U-000007FF:110xxxxx 10xxxxxxU-00000800 – U-0000FFFF:1110xxxx 10xxxxxx 10xxxxxxU-00010000 – U-001FFFFF:11110xxx 10xxxxxx 10xxxxxx 10xxxxxxU-00200000 – U-03FFFFFF:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxU-04000000 – U-7FFFFFFF:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxx

在ASCII码的范围,用一个字节表示,与以前的ASCII文件相容。大于ASCII码的,就会由上面的第一字节的前几位表示该unicode字符的长度,比如110xxxxxx前三位的二进制表示告诉我们这是个 2BYTE的UNICODE字符;1110xxxx是个三位的UNICODE字符,依此类推;

?

xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目.

?

例如"汉"字的Unicode编码是6C49。6C49在0800-FFFF之间,所以要用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 1100 0100 1001,将这个比特流按三字节模板的分段方法分为0110 110001 001001,依次代替模板中的x,得到:1110-0110 10-110001 10-001001,即E6 B1 89,这就是其UTF8的编码。

?

这种编码的官方名字拼写为 UTF-8, 其中 UTF 代表 U CS T ransformation F ormat. 请勿在任何文档中用其他名字 (比如 utf8 或 UTF_8) 来表示 UTF-8, 当然除非你指的是一个变量名而不是这种编码本身.

?

ASCII字母继续使用1字节储存,重音文字 、希腊字母 或西里尔字母 等使用2字节来储存,而常用的汉字 就要使用3字节 。辅助平面字符则使用4字节。

?

在UTF-8文件的开头,很多时都放置一个U+FEFF字符(UTF-8 以 EF,BB,BF 代表),以显示这个文字档案是以UTF-8编码。

?

?

UTF-8的特性

UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0x00 到 0x7F(ASCII 兼容),这也意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的。所有 >U+007F 的 UCS 字符被编码为一个多个字节的串。 表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里,并指出这个字符包含多少个字节。多字节串的其余字节都在 0x80 到 0xBF 范围里, 容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误。 字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到,同时,UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一様的,没有字节序的问题。与CPU字节顺序无关,,可以在不同平台之间交流。

?

Unicode:

unicode.org制定的编码机制, 要将全世界常用文字都函括进去.
在1.0中是16位编码, 由U+0000到U+FFFF. 每个2byte码对应一个字符; 在2.0开始抛弃了16位限制, 原来的16位作为基本位平面, 另外增加了16个位平面, 相当于20位编码, 编码范围0到0x10FFFF.

UCS:

ISO制定的ISO10646标准所定义的 Universal Character Set, 采用4byte编码.

?

?

UTF与unicode的关系:

Unicode是一个字符集, 可以看作为内码.
而UTF是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.

?

Unicode与UCS的关系:

ISO与unicode.org是两个不同的组织, 因此最初制定了不同的标准; 但自从unicode2.0开始, unicode采用了与ISO 10646-1相同的字库和字码, ISO也承诺ISO10646将不会给超出0x10FFFF的UCS-4编码赋值, 使得两者保持一致.

?

UCS 和 ISO 10646

国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS) . UCS 是所有其他字符集标准的一个超集. 它保证与其他字符集是双向兼容的. 就是说, 如果你将任何文本字符串翻译到 UCS格式, 然后再翻译回原编码, 你不会丢失任何信息.

?

?

?

?

热点排行