zoukankan      html  css  js  c++  java
  • UTF-8

    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码,又称万国码。由Ken Thompson于1992年创建。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

    优点

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

    缺点

    你无法从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编码。

    如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节。而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。UTF-8转换表表示如下:

    Unicode/UCS-4 bit数 UTF-8 byte数 备注
    0000~007F 0~7 0XXXXXXX 1  
    0080~07FF 8~11 110XXXXX10XXXXXX 2  
    0800~FFFF 12~16 1110XXXX10XXXXXX10XXXXXX 3 基本定义范围,0~FFFF
    10000~1FFFFF 17~21 11110XXX10XXXXXX10XXXXXX10XXXXXX 4 Unicode6,1定义范围,0~10FFFF
    200000~3FFFFFF 22~26 111110XX10XXXXXX10XXXXXX10XXXXXX10XXXXXX 5 说明,此非unicode编码范围,属于UCS-4编码早期的规范UTF-8可以到达6字节序列,可以覆盖到31位元(通用字符集原来的极限),尽管如此,2003年11月UTF-8被RFC3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,根据规范,这些字节值将无法出现在合法UTF-8序列中
    4000000~7FFFFFFF 27~31 1111110X10XXXXXX10XXXXXX10XXXXXX10XXXXXX10XXXXXX 6

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

    Unicode转换为UTF-8时,可以将Unicode二进制从低位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下示例所示的格式,前面按格式填补,不足8位用0填补。

    注:Unicode转换为UTF-8需要的字节数可以根据Unicode二进制的位数除以6来计算。

    示例

    UNICODEuCA(11001010)编码成UTF-8将需要2个字节

    uCA->C38A

    UNICODEuF03F(1111000000111111)编码成UTF-8将需要3个字节:

    uF03F->EF80BF

    Unicode16进制 Unicode2进制 bit数 UTF-82进制 UTF-816进制
    CA 11001010 8 1100001110001010 C38A
    F03F 1111000000111111 16 111011111000000010111111 EF80BF
  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/liaoliao/p/5009038.html
Copyright © 2011-2022 走看看