| 導購 | 订阅 | 在线投稿
分享
 
 
 

什麽是UTF8?

來源:互聯網網民  2004-11-30 12:05:30  評論

UTF8並不算是一種電腦編碼,而是一種儲存和傳送的格式,如前所述,每個Unicode/UCS字符都以 2或4個bytes來儲存,看看以下的比較:

以"I am Chinese"爲例

用ANSI儲存:12 Bytes

用Unicode/UCS2儲存:24 Bytes + 2 Bytes(header)

用UCS4儲存:48 Bytes + 4 Bytes(header)

以"我是中國人"爲例

用ANSI儲存:10 Bytes

用Unicode/UCS2儲存:10 Bytes + 2 Bytes(header)

用UCS4儲存:20 Bytes + 4 Bytes(header)

由此可見直接以Unicode/UCS的原始形式來儲存是一種極大的浪費,而且也不利于互聯網的傳輸(中文稍爲合算一點^_^)。

有見及此,Unicode/UCS的壓縮形式--UTF8出現了,套用官方網站的首句話『UTF-8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也適用于編碼UCS,故亦可稱爲『UCS transformation formats (UTF)』

UTF8是以8bits即1Bytes爲編碼的最基本單位,當然也可以有基于16bits和32bits的形式,分別稱爲UTF16和UTF32,但目前用得不多,而UTF8則被廣泛應用在文件儲存和網絡傳輸中。

編碼原理

先看這個模板:

UCS-4 range (hex.) UTF-8 octet sequence (binary)

0000 0000-0000 007F 0xxxxxxx

0000 0080-0000 07FF 110xxxxx 10xxxxxx

0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx

編碼步驟:

1) 首先確定需要多少個8bits(octets)

2) 按照上述模板填充每個octets的高位bits

3) 把字符的bits填充至x中,字符順序:低位→高位,UTF8順序:最後一個octet的最末位x→第一個octet最高位x

4) 解碼的原理一樣。

實例:(留意每個bit的顔色,粗體字爲模板內容)

UCS-4 UTF-8

HEX BIN Bytes BIN HEX Bytes

0000 000A 00001010 4 00001010 0A 1

0000 0099 10011001 4 11000010 10011001 C2 99 2

0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3

不知大家看懂了沒有,其實不懂也無所謂,反正又不用自己算,程式可以完全代勞。

以UTF8格式儲存的文件檔首標識爲EF BB BF。

效率

從上述編碼原理中得出的結論是:

1.每個英文字母、數字所占的空間爲1 Byte;

2.泛歐語系、斯拉夫語字母占2 Bytes;

3.漢字占3 Bytes。

由此可見UTF8對英文來說是個非常誘人的方案,但對中文來說則不太合算,無論用ANSI還是 Unicode/UCS2來編碼都只用2 Bytes,但用UTF8則需要3 Bytes。

以下是一些統計資料,顯示用UTF8來儲存文件每個字符所需的平均字節:

1.拉丁語系平均用1.1 Bytes;

2.希臘文、俄文、阿拉伯文和希伯萊文平均用1.7 Bytes;

3.其他大部份文字如中文、日文、韓文、Hindi(北印度語)用約3 Bytes;

4.用超過4 Bytes的都是些非常少用的文字符號。

 
特别声明:以上内容(如有图片或视频亦包括在内)为网络用户发布,本站仅提供信息存储服务。
 
 UTF8並不算是一種電腦編碼,而是一種儲存和傳送的格式,如前所述,每個Unicode/UCS字符都以 2或4個bytes來儲存,看看以下的比較:   以"I am Chinese"爲例    用ANSI儲存:12 Bytes    用Unicode/UCS2儲存:24 Bytes + 2 Bytes(header)    用UCS4儲存:48 Bytes + 4 Bytes(header)   以"我是中國人"爲例    用ANSI儲存:10 Bytes    用Unicode/UCS2儲存:10 Bytes + 2 Bytes(header)    用UCS4儲存:20 Bytes + 4 Bytes(header)   由此可見直接以Unicode/UCS的原始形式來儲存是一種極大的浪費,而且也不利于互聯網的傳輸(中文稍爲合算一點^_^)。   有見及此,Unicode/UCS的壓縮形式--UTF8出現了,套用官方網站的首句話『UTF-8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也適用于編碼UCS,故亦可稱爲『UCS transformation formats (UTF)』   UTF8是以8bits即1Bytes爲編碼的最基本單位,當然也可以有基于16bits和32bits的形式,分別稱爲UTF16和UTF32,但目前用得不多,而UTF8則被廣泛應用在文件儲存和網絡傳輸中。 編碼原理 先看這個模板: UCS-4 range (hex.) UTF-8 octet sequence (binary) 0000 0000-0000 007F 0xxxxxxx 0000 0080-0000 07FF 110xxxxx 10xxxxxx 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx 編碼步驟: 1) 首先確定需要多少個8bits(octets) 2) 按照上述模板填充每個octets的高位bits 3) 把字符的bits填充至x中,字符順序:低位→高位,UTF8順序:最後一個octet的最末位x→第一個octet最高位x 4) 解碼的原理一樣。 實例:(留意每個bit的顔色,粗體字爲模板內容) UCS-4 UTF-8 HEX BIN Bytes BIN HEX Bytes 0000 000A 00001010 4 00001010 0A 1 0000 0099 10011001 4 11000010 10011001 C2 99 2 0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3   不知大家看懂了沒有,其實不懂也無所謂,反正又不用自己算,程式可以完全代勞。   以UTF8格式儲存的文件檔首標識爲EF BB BF。 效率   從上述編碼原理中得出的結論是:    1.每個英文字母、數字所占的空間爲1 Byte;    2.泛歐語系、斯拉夫語字母占2 Bytes;    3.漢字占3 Bytes。   由此可見UTF8對英文來說是個非常誘人的方案,但對中文來說則不太合算,無論用ANSI還是 Unicode/UCS2來編碼都只用2 Bytes,但用UTF8則需要3 Bytes。   以下是一些統計資料,顯示用UTF8來儲存文件每個字符所需的平均字節:    1.拉丁語系平均用1.1 Bytes;    2.希臘文、俄文、阿拉伯文和希伯萊文平均用1.7 Bytes;    3.其他大部份文字如中文、日文、韓文、Hindi(北印度語)用約3 Bytes;    4.用超過4 Bytes的都是些非常少用的文字符號。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有