【网络】TCP传输字符的等宽编码

604 阅读1分钟

在进行TCP网络编程的时候,如果字符编码不处理好,很可能会出现中文乱码的情况。

  1. 全部乱码:编码解码格式不同

    这样会出现全部乱码,这个还是比较好查的。

  2. 部分乱码:TCP接收端分包问题

    因为TCP Receive的方法,只能接收byte数组,然后是定长的,比如2048,4096的长度为一个包进行接收。

    所以很可能2048个byte正好截取到一个中文字符的一般(我们知道绝大部分中文一般占两个byte)

对于第二种情况,因为这主要是因为英文字母和标点符号是一个byte,所以会出现这个问题。

最好的解决方法就是,让编码等宽。也就是传说中的Unicode

Unicode编码格式长度
utf8英文字符占1个字节,汉字占3个字节
utf16中文英文都占2个字节,对于个别特殊情况可能会超过2个字节
utf32中文英文都占4个字节

我们可以看到,一般情况下其实utf16已经够了,而且比较省空间。

严格的情况下,比如已知可能需要传输一些特殊字符或者生僻字,那就要用utf32了。但是相对会牺牲很多空间。

编码参考:www.cnblogs.com/kekec/p/338…