含中文的response body不完整

自制的web服务器通过socket 输出流回写响应时,发现response body中只要出现中文,就会短一截。

当出现三个中文字符,缺少了 /html> 这六个字符。
含中文的response body不完整
每多一个中文字符,response body就会缺两个字符,我立马想到了utf-8编码下中文字符占三个字节这一特点,这可不就是3-1=2嘛!

回想一下整个web server的设计,统一采用utf-8编码进行IO,那肯定是在计算content-length的时候把中文字符算成1个字节了,导致在回写response body内容的时候就漏掉了响应体的最后一部分内容。

查看代码的write方法,果然是直接把message.length()赋给了content-length!
于是先把字符串指定编码转为字节数组,再取字节数组的长度。
含中文的response body不完整
这样一来回写的response body终于正常了!
含中文的response body不完整
上一篇文章也是被不同编码中文占字节数给坑了,这把又踩坑咯