UTF-8最多編碼字符數(最多可以容納多少數量的字符)?


轉載自https://wenwen.sogou.com/z/q775098352.htm

提問:

UTF-8最多編碼字符數(最多可以容納多少數量的字符)?


這個。。。如果你說的是它能表示多長的字符數據,那沒有限制的。 如果你意思是他的編碼里面能表示多少種字符,這個真心沒人去算,因為它是可變長度的,實在要說的話就是理論上1到6字節表示的一個字符都會有,已經能表示上億種字符,目前這一種編碼直接搞定世界大多數語言都問題不大。
追問:
,我問的是表示多少字符。不是最大4字節嗎?8^2+8^4^+8^6+8^8=17 043 520?怎么算出上億字符?求計算方法。
追答:
這個問題,首先的話我對自己沒說清楚表示歉意,因為UTF-8這個詞表達的含義比較多,在歷史上也被不同定義過,我說的是最大的情況。 具體UTF-8怎么去到6字節,你可以去百度百科看一下,大意是說最一開始設計的UTF-8理論上就能去到6字節,但是后面被折騰成標准化UTF-8后,5,6字節長的被和諧了。但是最后又寫出一種“修正的UTF-8”,理論上也能有6字節。 那么說回你想要的結果,你要的是最大4字節的標准化UTF-8的可表示字符數吧。我們先搞清楚它怎么表示。 
下表總結了編碼規則,字母x表示可用編碼的位。

    Unicode符號范圍 | UTF-8編碼方式
    (十六進制) | (二進制)
    --------------------+---------------------------------------------
    0000 0000-0000 007F | 0xxxxxxx
    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
跟據上表,解讀UTF-8編碼非常簡單。如果一個字節的第一位是0,則這個字節單獨就是一個字符;如果第一位是1,則連續有多少個1,就表示當前字符占用多少個字節。后面跟的開頭都是10。 那么自己數一下X的數量就知道,結果是2^6+2^11+2^16+2^21=2164864。 也就是說,標准化的UTF-8能表示200多萬種字符。 希望以上回答您能滿意。還有問題請追問,滿意就采納吧,謝謝。
追問:
2^11和2^21中的11和21怎么來的?
追答:
不是說了數X的個數么。。第二行二進制里(110xxxxx 10xxxxxx)不是有11個X嗎……所以就是2^11羅。21同理。X對應實際編碼里能改的位。 至於前面那幾位110,10因為編碼里不能動的所以就沒計算了。 我暈結果有筆誤,應該是2^7+2^11+2^16+2^21,不過得數應該沒問題。
追問:
這里肯定涉及到了字節(Byte)和位(bit)的轉換了吧,前面固定110和10的作用是什么?
追答:
。。。。我的第一個追答“跟據上表,解讀UTF-8編碼非常簡單。如果一個字節的第一位是0,則這個字節單獨就是一個字符;如果第一位是1,則連續有多少個1,就表示當前字符占用多少個字節。后面跟的開頭都是10。”這段已經說得很明白了。 意思就是,如果一個字符要占2字節,它的第一字節開頭就是110(2個1加1個0,0是為了隔開連續的1),第二字節就是10開頭(表示這是一個多字節字符的一部分。編碼如此,不知道是不是為了防止后面誤跟一個單字節字符)。 另外字節和位本來就是一回事,同樣東西不同單位而已,同樣一個二進制位串1111 1111你也可以說是字節FF,就像1升水你可以說是1000毫升水。用二進制位來算要直觀一點罷了。
 


免責聲明!

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



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