BufferedWriter 中的非英文字母

Non-english letter in BufferedWriter

我在 Java 中编写了一个简单的 HTTP 服务器。我在将数据返回到浏览器时遇到问题。

这里写一个返回的内容:

this.writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream(), Charset.forName("UTF-8").newEncoder()));
...
writer.write(this.getResponseLine() + "\n");
writer.write("Content-Type: " + this.contentType + "; charset=utf-8\n");
writer.write("Content-Length: " + this.body.length() + "\n");
writer.write("\r\n");
writer.write(new String(this.body.getBytes(), "UTF-8"));
writer.flush();
writer.flush();

方法this.body.getBytes()returns"Witaj świecie",但是在浏览器中只有"Witaj świeci"(缺少最后一个字母).

问题出在哪里?

我的猜测是:this.body.length() 字符 计数,而不是字节计数。那里有一个 UTF8 字符,Content-Length header 将太小一个字节,让浏览器在 HTTP 消息 body 实际结束之前停止从套接字读取。