關於“為何Unicode中文字符占取2個字節,而 UTF-8卻占3個字節”的網絡解釋修正


學到編碼時,有個疑問——好好的占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規則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM