UTF-8编码的相关知识

2009-05-13 07:16:52来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

字符集和编码的区别:

字符集:字符集是一个字符的集合,比如ASCII字符集,ASCII扩展字符集,unicode字符集,中国的gb2312、gb18030字符集等等,我们说字符集往往连带的说“编码”,但实际上字符集就是一个容纳表现文字的集合。在计算机信息处理中,编码和字符集是密切相关的。没有对字符集的编码,就不能处理文字信息。

编码:是对字符集的一种编码方案,这个往往又要和字库联系起来,各种编码方案的目的就是要在字库中检索具体的现实世界中的文字。

内码与字库编码:内码是文件存储文字信息的具体编码格式,例如KDE中采用UTF-8,意思就是文件中的所有字符都是按照UTF-8的编码标准来存储的。当处理这个文件的时候,比如显示,就存在这样的一个如何把内码转换成字库编码的问题,因为具体文字的现实都要借助对字库的查找、提取以及显示等过程,所以也就会存在utf编码的文件,在不同的系统中,不同的应用环境中显示为乱码!

一个程序要想解决好文字录入,文字保存,文字的输出,都离不开内码与字库编码的转换问题。这也需要系统底层对这些处理的支持。


言归正传,UTF-8是什么!

UTF的中文意思就是通用转换格式,它是一种unicode字符集的编码方式。用1-6个字节对unicode字符集进行变长编码。算是一种中间格式的编码方案。

他的特点就是变长,对于ASCII字符集和扩展字符集用一个字节编码,而诸如“汉字”根据unicode的编码转换成多字节编码。

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


UTF-8编码的优点:
UTF-8编码可以通过屏蔽位和移位操作快速读写。字符串比较时strcmp()和wcscmp()的返回结果相同,因此使排序变得更加容易。字节FF和FE在UTF-8编码中永远不会出现,因此他们可以用来表明UTF-16或UTF-32文本(见BOM) UTF-8 是字节顺序无关的。它的字节顺序在所有系统中都是一样的,因此它实际上并不需要BOM。
BOM(Byte Order Mark)是一个字符,它表明UNICODE文本的UTF-16,UTF-32的编码字节顺序(高字节低字节顺序)和编码方式(UTF-8,UTF-16,UTF-32, 其中UTF-8编码是字节顺序无关的)。


UTF-8编码的缺点:
你无法从UNICODE字符数判断出UTF-8文本的字节数,因为UTF-8是一种变长编码它需要用2个字节编码那些用扩展ASCII字符集只需1个字节的字符 ISO Latin-1 是UNICODE的子集,但不是UTF-8的子集 8位字符的UTF-8编码会被email网关过滤,因为internet信息最初设计为7为ASCII码。因此产生了UTF-7编码。 UTF-8 在它的表示中使用值100xxxxx的几率超过50%, 而现存的实现如ISO 2022, 4873, 6429, 和8859系统,会把它错认为是C1 控制码。因此产生了UTF-7.5编码。
修正的UTF-8:
标准UTF-8和修正的UTF-8有两点不同:修正的UTF-8中,null字符编码成2个字节(11000000 00000000) 而不是标准的1个字节(00000000),这样作可以保证编码后的字符串中不会嵌入null字符。因此如果在类C语言中处理字符串,文本不会在第一个null字符时截断(C字符串以null结尾)。在标准UTF-8编码中,超出基本多语言范围(BMP - Basic Multilingual Plain)的字符被编码为4字节格式,但是在修正的UTF-8编码中,他们由代理编码对(surrogate pairs)表示,然后这些代理编码对在序列中分别重新编码。结果标准UTF-8编码中需要4个字节的字符,在修正后的UTF-8编码中将需要6个字节。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:看脚本学shell编程

下一篇:openbsd 硬盘检查命令