请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

感觉有点矛盾

“你”在Unicode字符集里对应的编号是4f60(占用2个字节),为什么传输时不直接用这个4f60转成二进制,反而要用Utf-8编码成3个字节再传输?这样不是开销大了么?这感觉和开始说的定长编码浪费字节暂用相矛盾?

正在回答 回答被采纳积分+3

1回答

AlexWang 2024-02-22 17:47:35

因为如果使用定长编码,“你”确实2个字节就够了,那其他的呢?2个字节最多也就65536个字符,会有很多字符无法编码。

如果想要全部编码是不是就需要4个字节?但是4个字节的话对于排在前面的就是很大的浪费,比如“你”原本就只需要2个字节,现在却需要4个了。

所以可以使用变长编码,有的字符只需要1个字节,有的字符需要2个,有的3个...

但是变长编码有个问题,读取的时候怎么知道要读取几个再解码呢?就需要在编码的时候规定好,比如utf-8编码就是利用开头的几位来规定这个码有几位

0 回复 有任何疑惑可以回复我~
  • 提问者 sleeping_cat #1
    “你”如果是用4字节确实是浪费,但是变成3字节照样也是浪费吧(毕竟比本来2字节大),还是说并不是所有字符经过utf-8编码后都会变大?变长编码是不是如字面意思编码完后会字节会比原来变长?
    回复 有任何疑惑可以回复我~ 2024-02-22 18:44:39
  • AlexWang 回复 提问者 sleeping_cat #2
    使用变长编码,字符集中编号在前面的可以用一个字节就能编码,后面一点的用2个字节就能编码,再往后的3个字节。如果是定长的编码,不管是处在字符集中哪个位置的字符,全都需要4个字节来编码
    回复 有任何疑惑可以回复我~ 2024-02-22 19:41:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信