**:
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則被廣泛應用在檔案儲存和網路傳輸中。
在網路中有很多地方都有採用utf8編碼,由於要編寫與郵件服務端有關的程式,而郵件服務端有些地方用到了utf8編碼
,所以對它有了初步的認識!
它其實和unicode是同類,就是在編碼方式上不同!
首先utf8編碼後的大小是不一定,不像unicode編碼後的大小是一樣的!
我們先來看unicode的編碼:乙個英文本母 「a」 和 乙個漢字 「好」,編碼後都是占用的空間大小是一樣的,都是兩
個位元組!
而utf8編碼:乙個英文本母「a」 和 乙個漢字 「好」,編碼後占用的空間大小就不樣了,前者是乙個位元組,後者是三
個位元組!
現在就讓我們來看看utf8編碼的原理吧:
因為乙個字母還有一些鍵盤上的符號加起來只用二進位制七位就可以表示出來,而乙個位元組就是八位,所以utf8就用乙個
位元組來表式字母和一些鍵盤上的符號。然而當我們拿到被編碼後的乙個位元組後怎麼知道它的組成?它有可能是英文本母
的乙個位元組,也有可能是漢字的三個位元組中的乙個位元組!所以,utf8是有標誌位的!
當要表示的內容是7位的時候就用乙個位元組:0******* 第乙個0為標誌位,剩下的空間正好可以表示ascii 0-127 的內
容。 當要表示的內容在8到11位的時候就用兩個位元組:110***** 10****** 第乙個位元組的110和第二個位元組的10為標誌位。
當要表示的內容在12到16位的時候就用三個位元組:1110***** 10****** 10****** 和上面一樣,第乙個位元組的1110和第
二、三個位元組的10都是標誌位,剩下的空間正好可以表示漢字。
以此類推:
四個位元組:11110**** 10****** 10****** 10******
五個位元組:111110*** 10****** 10****** 10****** 10******
六個位元組:1111110** 10****** 10****** 10****** 10****** 10******
UTF8編碼 解碼
參考文件 rfc3629標準.對於任意乙個字,都可以用乙個唯一碼 unicode碼,由標準編制 表示,在應用過程中,需要對碼進行編碼.常用的編碼方式為utf 8.utf 8採用類似於ip位址分配的機制.即對於不同範圍的unicode碼,採用不同的模板進行編碼.流程概述為 2.1 查表獲取unicod...
utf8的編碼演算法
unicode字符集是我們世界上最完善最全面的字符集,幾乎包含了世界上所有的字元。其實可以這麼理解,unicode字符集是一張巨大的 把世界上各種語言的字元和標點符號都編排到裡面,然後按照一定的順序給每個字元排號 很遺憾的是對於中文來說,這個順序不是按照漢語拼音的順序 有了這張巨大的 世界上大部分字...
字元編碼之UTF 8
博學,切問,近思 詹子知 http blog.csdn.net zhiqiangzhan utf 8 8 位元 universal character set unicode transformation format 是一種針對unicode的可變長度字元編碼。utf 8 是一種傳輸編碼,他和定長...