學到編碼時,有個疑問——好好的佔2字節的Unicode不用,卻要用佔3字節的UTF-8編碼。發明 UTF-8的初衷不就是爲了修正Unicode中任何字符至少佔用2個字節的弊端嗎?編碼
雖然UTF-8英文字符佔空間減小了(由Unicode中的16位動態縮減爲與ASCⅡ一致的8位),但你在中文字符這部分增爲3字節=24位,減小的空間一會兒又沒了。spa
查了一些博客文,發覺都是互抄的,錯誤低級到好笑。。。學點東西咋這難呢,實體媒體要防範盜版書,數字媒體還要防範「不走腦子的copy」code
幸虧,高大上的知乎有人手打文字答疑。我寫點本身的解釋。。。blog
Unicode符號範圍 | UTF-8編碼方式 (十六進制) | (二進制) #Unicode部分爲16進制編碼, UTF-8編碼爲2進制 —————————————————————–————————————– 0000 0000-0000 007F | 0xxxxxxx #UTF-8規定,若1字符=1字節,首位須爲‘0’ 0000 0080-0000 07FF | 110xxxxx 10xxxxxx #UTF-8規定,若1字符=2字節,高位字節前3位爲‘110’,低位前2位爲‘10’ 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx #UTF-8規定,若1字符=3字節,高位字節前3位爲‘110’,後面低位前2位一概爲‘10’。(佔4,5字節字符規則以此類推) 做者:於洋 連接:https://www.zhihu.com/question/23374078/answer/69732605 來源:知乎 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
因爲utf-8規則自然佔用字節前幾位,若與Unicode一樣用2字節16位表示一箇中文字符,則utf-8除去規則佔用,只剩餘16-5=11位,沒法。utf-8
那麼看下面「1字符=3字節」 這段,除去規則佔用,還剩餘8x3-8=16位,剛好符合16位=1中文字符這一Unicode規則。博客