UTF-8

UTF-8_6分词条

UTF-8UTF-8
UTF-8是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化为RFC3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。

目录 [隐藏]

UTF-8 基本概述

       

UTF-8UTF-8
UFT-8转换表表示如下:
UNICODEUTF-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

实际表示ASCII字符的UNICODE字符,将会编码成1个字节,并且UTF-8表示与ASCII字符表示是一样的。所有其他的UNCODE字符转化成UTF-8将需要至少2个字节。每个字节由一个换码序列开始。第一个字节由唯一的换码序列,由n位1加一位0组成。n位1表示字符编码所需的字节数。

UTF-8 优点缺点

       

UTF-8UTF-8
UTF-8编码的优点:

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

UTF-8编码的缺点:

无法从UNICODE字符数判断出UTF-8文本的字节数,因为UTF-8是一种变长编码它需要用2个字节编码那些用扩展ASCII字符集只需1个字节的字符ISOLatin-1是UNICODE的子集,但不是UTF-8的子集8位字符的UTF-8编码会被email网关过滤,因为internet信息最初设计为7为ASCII码。因此产生了UTF-7编码。UTF-8在它的表示中使用值100xxxxx的几率超过50%,而现存的实现如ISO2022,4873,6429,和8859系统,会把它错认为是C1控制码。因此产生了UTF-7.5编码。

UTF-8 修正更新

       

UTF-8UTF-8
java使用UTF-16表示内部文本,并支持用于字符串串行化的非标准的修正UTF-8编码。

标准UTF-8和修正的UTF-8有两点不同:

修正的UTF-8中,null字符编码成2个字节(1100000010000000)而不是标准的1个字节(00000000),这样作可以保证编码后的字符串中不会嵌入null字符。因此如果在类C语言中处理字符串,文本不会在第一个null字符时截断(C字符串以null结尾)。

在标准UTF-8编码中,超出基本多语言范围(BMP-BasicMultilingualPlain)的字符被编码为4字节格式,但是在修正的UTF-8编码中,他们由代理编码对(surrogatepairs)表示,然后这些代理编码对在序列中分别重新编码。结果标准UTF-8编码中需要4个字节的字符,在修正后的UTF-8编码中将需要6个字节。

UTF-8 字符集史

       

UTF-8UTF-8
在所有字符集中,最知名可能要数被称为ASCII的7位字符集了。它是美国信息交换标准委员会(American Standards Committeefor Information Inter change)的缩写,为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。

由于针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题。因此,创建出了一些包括255个字符的由ASCII扩展的字符集。其中有一种通常被成为IBM字符集,它把值为128-255之间的字符用于画图和画线,以及一些特殊的欧洲字符。另一种8位字符集是ISO8859-1Latin1,也简称为ISOLatin-1。它把位于128-255之间的字符用于拉丁字母表中特殊语言字符的编码,也因此而得名。

欧洲语言不是地球上的唯一语言,因此亚洲非洲语言并不能被8位字符集所支持。仅汉语(或pictograms)字母表就有80000以上个字符。但是把汉语、日语和越南语的一些相似的字符结合起来,在不同的语言里,使不同的字符代表不同的字,这样只用2个字节就可以编码地球上几乎所有地区的文字。因此,创建了UNICODE编码。它通过增加一个高字节对ISOLatin-1字符集进行扩展,当这些高字节位为0时,低字节就是ISOLatin-1字符。UNICODE支持欧洲、非洲、中东、亚洲(包括统一标准的东亚像形汉字和韩国像形文字)。但是,UNICODE并没有提供对诸如Braille,Cherokee,Ethiopic,Khmer,Mongolian,Hmong,TaiLu,TaiMau文字的支持。同时它也不支持如Ahom,Akkadian,Aramaic,BabylonianCuneiform,Balti,Brahmi,Etruscan,Hittite,Javanese,Numidian,OldPersianCuneiform,Syrian之类的古老的文字。

用ASCII表示的字符使用UNICODE并不高效,因为UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,既UTF(UniversalTransformationFormat)。存在的UTF格式有:UTF-7,UTF-7.5,UTF-8,UTF-16,以及UTF-32。

UTF-8 位序标志

       

BOM(ByteOrderMark)是一个字符,它表明UNICODE文本的UTF-16,UTF-32的编码字节顺序(高字节低字节顺序)和编码方式(UTF-8,UTF-16,UTF-32,其中UTF-8编码是字节顺序无关的)。

UTF-8 相关词条

       
MYSQL IP ICP ALEXA PR SEO
CGI FSO FTP POP3 WCM ECM
FLASH WEB GPU CPA DIV CSS
HTML BBS .NET XML AJAX MD5

 

 

 

UTF-8 参考资料

       
1、http://www.vckbase.com/document/viewdoc/?id=1397
2、http://yan.me/dia/166/
3、http://dev.21tx.com/2007/05/18/10798.html

附图

上传图片 

互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。如需转载,请注明来源于www.hudong.com

被引用: UTF-8已被如下媒体引用 我来补充
互动百科联盟百科联盟 技术百科 新查找百科 华站长资讯网
开放分类: 我来补充
技术
网站
网站建设术语
网站术语
计算机技术
通信技术

讨论区

更多>>

编辑者

共7人协作

相关词条

JAVA
正则表达式
多用途网际邮件扩展协议
SAN
字符串
大五码
针式打印机
UNICODE
ModBus
表形码
更多

所属任务

Copyright © 2005-2009 hudong.com Ltd. All Rights Reserved. 互动在线 版权所有