采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
“你”在Unicode字符集里对应的编号是4f60(占用2个字节),为什么传输时不直接用这个4f60转成二进制,反而要用Utf-8编码成3个字节再传输?这样不是开销大了么?这感觉和开始说的定长编码浪费字节暂用相矛盾?
因为如果使用定长编码,“你”确实2个字节就够了,那其他的呢?2个字节最多也就65536个字符,会有很多字符无法编码。
如果想要全部编码是不是就需要4个字节?但是4个字节的话对于排在前面的就是很大的浪费,比如“你”原本就只需要2个字节,现在却需要4个了。
所以可以使用变长编码,有的字符只需要1个字节,有的字符需要2个,有的3个...
但是变长编码有个问题,读取的时候怎么知道要读取几个再解码呢?就需要在编码的时候规定好,比如utf-8编码就是利用开头的几位来规定这个码有几位
“你”如果是用4字节确实是浪费,但是变成3字节照样也是浪费吧(毕竟比本来2字节大),还是说并不是所有字符经过utf-8编码后都会变大?变长编码是不是如字面意思编码完后会字节会比原来变长?
使用变长编码,字符集中编号在前面的可以用一个字节就能编码,后面一点的用2个字节就能编码,再往后的3个字节。如果是定长的编码,不管是处在字符集中哪个位置的字符,全都需要4个字节来编码
登录后可查看更多问答,登录/注册
系统学习网络底层知识,提升核心竞争力
510 8
400 6
152 5
244 5
206 4