UTF-8 - 字嗨!

文章推薦指數: 80 %
投票人數:10人

UTF-8是Unicode的一種可變長度的字元編碼形式。

它設計來相容於ASCII,讓原本處理ASCII字元 ... 0800~FFFF, 3, 1110xxxx (E0-EF), 10xxxxxx (80-BF), 10xxxxxx (80-BF). 字碼漢字登入 UTF-8📄💬 UTF-8是Unicode的一種可變長度的字元編碼形式。

它設計來相容於ASCII,讓原本處理ASCII字元的軟體幾乎無須修改,即可處理Unicode資料。

因此它成為E-mail、網頁、程式碼等各種純文字文件處理Unicode時最通用的編碼方式。

編碼方式 碼點範圍序列長度Byte1Byte2Byte3Byte4 0000~007F10xxxxxxx(00-7F) 0080~07FF2110xxxxx(C0-DF)10xxxxxx(80-BF) 0800~FFFF31110xxxx(E0-EF)10xxxxxx(80-BF)10xxxxxx(80-BF) 10000~10FFFF411110xxx(F0-F7)10xxxxxx(80-BF)10xxxxxx(80-BF)10xxxxxx(80-BF) 範例 碼位(二進位)UTF-8(二進位) U+0041A00000000010000014101000001 U+03C9ω0000001111001001CF891100111110001001 U+20AC€0010000010101100E282AC111000101000001010101100 U+2C9B0𬦰000000101100100110110000F0ACA6B011110000101011001010011010110000 特性 完全向下相容ASCII編碼範圍,所以多數既有的編譯器等軟體可以正常處理UTF-8資料。

基本多語言平面內的一般常用漢字佔3個bytes,比UTF-16與傳統Big5、Shift_JIS等編碼的2bytes要長。

但實際上因為多數文件還是ASCII文字比例最高(如HTML文件有大量的HTMLtag),多數情況下UTF-8會比UTF-16檔案總長度更短。

UTF-8容易檢查錯誤,例如一個0xE0~0xEF的位元組可判斷其後面必須跟隨剛好兩個0x80~0xBF的位元組。

但也因此造成一定程度的浪費。

CESU-8 UTF-16使用代理對的方式來處理補充平面的文字,在一些UTF-8的變形實作上,存在有誤把代理對直接依照UTF-8編碼方式進行轉換的問題。

例如U+1F44D👍的正確UTF-8應該編成F09F918D。

但某些實作卻把UTF-16的代理對D83DDC4D各自編碼為EDA0BD與EDB18D,共6個bytes。

這並不是正確的UTF-8編碼,Unicode官方文件(UTF-16的8位元相容編碼方式)規定這只能做為內部編碼,不應該用來交換資料。

W3C也規定HTML不應使用這種編碼形式,以免造成無法預期的XSS風險。

但實際上可能因為一些資料庫、程式語言的錯誤實作,偶爾會在網址列等處看到這樣的資料。

本站編碼資訊欄的「URLEncode」處有標註CESU-8的值,僅供參考,不建議使用。

MySQL編碼 MySQL資料庫早年支援的UTF-8實際上一直只支援3bytes為止的範圍,而無法支援補充平面裡的擴充漢字等文字。

一直到2010年,才終於推出新的「utf8mb4」編碼去支援4bytes的Unicode文字。

隨著Emoji的風行,使用MySQL的各網站、論壇逐步才改以「utf8mb4」儲存資料。

參見 Unicode UTF-16 基本多語言平面 補充平面 建立於2022年3月15日11時18分本條目共被1位不同作者編輯過3次最後一次修改於2022年3月17日22時02分關於本站|關於字碼資料庫



請為這篇文章評分?