zoukankan      html  css  js  c++  java
  • 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毫升水。用二进制位来算要直观一点罢了。
     
  • 相关阅读:
    配送单MYSQL ,一点都不机智
    强哥新周报SQL
    SQL 交叉连接与内连接
    pycharm git 提交使用情况
    MYSQL freedata 外联接
    SQL 添加字段
    邮件发送方法代码时
    调通有赞接口数据,翻页获取
    superset dashboard 设置自动刷新
    python 语法错误记录
  • 原文地址:https://www.cnblogs.com/faberbeta/p/13641969.html
Copyright © 2011-2022 走看看