UTF-8 可變編碼格式

轉自:http://blog.csdn.net/swedenfeng/article/details/53467720
 
UTF-8 是一種可變編碼格式,長度從一個字節到四個字節,可根據UTF-8字符的第一個字節來識別一個UTF-8字符的長度(具體見下面描述).

由於網絡中大部分的字符是ASCII碼字符,UTF-8能夠用一個字節表示ASCII字符,相較於UTF-16和UTF-32的兩個字節或者四個字節,大幅節省了空間和傳輸帶寬.網絡

 

幾個UTF-8的編碼例子 (由該網頁工具轉換 https://sites.google.com/site/nathanlexwww/tools/utf8-convert 工具

 

字符            UTF-8編碼    Byte 1                   Byte 2             Byte 3google

A                                         01000001                                                                                          編碼

Ö                                        11000011            10010110       spa

中                                       11100100            10111000      10101101.net

 

Note:   Byte 1 中開頭"1"的個數就是整個 UTF-8編碼中字節的數目(只適用於長度大於等於兩個字節的UTF編碼,表示ASCII編碼的UTF首字節的首位是0)code

 

 

#如下內容部分來自wiki,部分來自stackoverflow.orm

 

UTF-88-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,也是一種前綴碼。它能夠用來表示Unicode標準中的任何字符,且其編碼中的第一個字節仍與ASCII兼容,這使得原來處理ASCII字符的軟件無須或只須作少部分修改,便可繼續使用。所以,它逐漸成爲電子郵件網頁及其餘存儲或發送文字的應用中,優先採用的編碼。blog

UTF-8使用一至六個字節爲每一個字符編碼(儘管如此,2003年11月UTF-8被RFC 3629從新規範,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個字節):ip

 

  Binary    Hex                 Comments
0xxxxxxx  0x00..0x7F   Only byte of a 1-byte character encoding
10xxxxxx  0x80..0xBF   Continuation bytes (1-3 continuation bytes)
110xxxxx  0xC0..0xDF   First byte of a 2-byte character encoding
1110xxxx  0xE0..0xEF   First byte of a 3-byte character encoding
11110xxx  0xF0..0xF7   First byte of a 4-byte character encoding
  
  
對於UTF-8編碼中的任意字節X,若是X的第一位爲0,則X獨立的表示一個字符(ASCII碼)
若是X的第一位爲1,第二位爲0,則X爲一個多字節字符中的後續字節(非第一字節)
若是X的前兩位爲1,第三位爲0,則X爲兩個字節表示的字符中的第一個字節
若是X的前三位爲1,第四位爲0,則X爲三個字節表示的字符中的第一個字節
若是X的前四位爲1,第五位爲0,則X爲四個字節表示的字符中的第一個字節

 

 

Unicode 和 UTF-8 之間的轉換關係表 ( x 字符表示碼點佔據的位 )
碼點的位數 碼點起值 碼點終值 字節序列 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
  7 U+0000 U+007F 1 0xxxxxxx
11 U+0080 U+07FF 2 110xxxxx 10xxxxxx
16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx
21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

 

  • 在ASCII碼的範圍,用一個字節表示,超出ASCII碼的範圍就用字節表示,這就造成了咱們上面看到的UTF-8的表示方法,這様的好處是當UNICODE文件中只有ASCII碼時,存儲的文件都爲一個字節,因此就是普通的ASCII文件無異,讀取的時候也是如此,因此能與之前的ASCII文件兼容。
  • 大於ASCII碼的,就會由上面的第一字節的前幾位表示該unicode字符的長度,好比110xxxxx前三位的二進制表示告訴咱們這是個2BYTE的UNICODE字符;1110xxxx是個三位的UNICODE字符,依此類推;xxx的位置由字符編碼數的二進制表示的位填入。越靠右的x具備越少的特殊意義。只用最短的那個足夠表達一個字符編碼數的多字節串。注意在多字節串中,第一個字節的開頭"1"的數目就是整個串中字節的數目。

 

Some useful links:

http://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt

http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=bin


 

##博客僅做我的記錄##

相關文章
相關標籤/搜索