utf編碼文件為什麼全是字母
Ⅰ 什麼是UTF-8編碼
8位Unicode轉換格式(UTF-8)是一種用於編碼各種字元的相對較新的代碼約定。
它是字元標識的標准,也是各種編程語言和設備的參考,有助於標准化字母,數字和其他字元的顯示。
在許多情況下,UTF-8取代了一種名為美國信息交換標准碼(ASCII)的舊約定。
ASCII處理英語語言文本所需的所有字元,但UTF-8為不使用英語或羅馬字母的其他語言處理更多不同的符號集。UTF-8被認為是與ASCII向後兼容的。
Ⅱ UTF8 怎麼理解
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******