學到編碼時,有個疑問——好好的占2字節的Unicode不用,卻要用占3字節的UTF-8編碼。發明 UTF-8的初衷不就是為了修正Unicode中任何字符至少占用2個字節的弊端嗎?
雖然UTF-8英文字符占空間減少了(由Unicode中的16位動態縮減為與ASCⅡ一致的8位),但你在中文字符這部分增為3字節=24位,減少的空間一下子又沒了。
查了一些博客文,發覺都是互抄的,錯誤低級到可笑。。。學點東西咋這難呢,實體媒體要防范盜版書,數字媒體還要防范“不走腦子的copy”
幸好,高大上的知乎有人手打文字答疑。我寫點自己的解釋。。。
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位,無法。
那么看下面“1字符=3字節” 這段,除去規則占用,還剩余8x3-8=16位,恰好符合16位=1中文字符這一Unicode規則。