学到编码时,有个疑问——好好的占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规则。