下列字節串用來表示一個字符. 用到哪個串取決于該字符在 Unicode 中的序號.
U+00000000 - U+0000007F: | 0 xxxxxxx | 0x - 7x | |
U+00000080 - U+000007FF: | 110 xxxxx 10 xxxxxx | Cx 8x - Dx Bx | |
U+00000800 - U+0000FFFF: | 1110 xxxx 10 xxxxxx 10 xxxxxx | Ex 8x 8x - Ex Bx Bx | |
U+00010000 - U+001FFFFF: | 11110 xxx 10 xxxxxx 10 xxxxxx 10 xxxxxx | F0 8x 8x 8x - F7 Bx Bx Bx | 很少用 |
U+00200000 - U+03FFFFFF: | 111110 xx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx | F8 8x 8x 8x 8x - FB Bx Bx Bx Bx | |
U+04000000 - U+7FFFFFFF: | 1111110 x 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx | FC 8x 8x 8x 8x 8x - FD Bx Bx Bx Bx Bx |
* FE FF從未在編碼中出現過.
* 除第一個字節外,其余字節都在
0x80 到 0xBF范圍內,每個字符的起始位置用0xC0-0xD0,0xE0,0xF0等可以確定(驗證前四位或八位),不在這一范圍的即為單字節字符.凡是以0x80 到 0xBF開頭的都是后繼字節,計數時都要跳過.
* Unicode是一種編碼表,只將字符指定給某一數字(Unicode做得還要更多一些,比如提供比較及顯示等很多算法等等);
而UTF-8是編碼方式,是定義如何表示并存儲指定編碼的格式.
* UTF-8編碼轉換為Unicode編碼: 將所有標志位去除,剩余位數若不足則在高位補零,湊足32位即可.
* Unicode編碼轉換為UTF-8編碼: 從低位開始,每取6位補兩個位10,不足6位(不算高位的0)則按字節長度補相應的字符標志位0、110、1110等