UTF-8 - 字嗨!
文章推薦指數: 80 %
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分關於本站|關於字碼資料庫
延伸文章資訊
- 1UTF-8 Tool
Hex code point, 0025. Decimal code point, 37. Hex UTF-8 bytes, 25. Octal UTF-8 bytes, 45. UTF-8 b...
- 2Whats going on with this byte array? - Stack Overflow
When that character gets encoded back to UTF-8, this results in the byte sequence EF BF BD . You ...
- 3你应该记住的一个UTF-8字符「EF BF BD」 | 行思錄
所谓编码方案即讲字符集到码点(code point)的映射方式。 在众多的utf-8码点值中,除了ascii,你还应该记住「EF BF BD」,因为它是很多 ...
- 4UTF8 3byte(ef)
UTF8 3byte(ef) ; ef 80 80,, ; ef 81 80,, ; ef 82 80,, ; ef 83 80,, ; ef 84 80,, ...
- 5Entity Framework Core SQL Server 提供者特有的資料行功能
使用其中一個SQL Server的UTF-8 定序來設定屬性的定序;這些定序具有 UTF8 後置詞(請參閱定序) 的檔。 請勿停用屬性上的Unicode;這會導致EF Core 建立資料 ...