Java 我向浏览器发送消息,但浏览器仅接收部分消息

Java 我向浏览器发送消息,但浏览器仅接收部分消息,java,utf-8,Java,Utf 8,我用Java编写了一个简单的服务器,但我有一个问题。负责向浏览器发送响应的代码如下所示: PrintWriter out = new PrintWriter(new OutputStreamWriter(this._client.getOutputStream(), StandardCharsets.UTF_8), true); out.write("HTTP/1.1 200 OK\n"); out.write("Access-Control-Allow-Origin: *\n"); out.

我用Java编写了一个简单的服务器,但我有一个问题。负责向浏览器发送响应的代码如下所示:

PrintWriter out = new PrintWriter(new OutputStreamWriter(this._client.getOutputStream(), StandardCharsets.UTF_8), true);

out.write("HTTP/1.1 200 OK\n");
out.write("Access-Control-Allow-Origin: *\n");
out.write("Access-Control-Allow-Headers *\n");
out.write("Content-Type: application/xhtml+xml; charset=utf-8\n");
out.write("Accept-Encoding: UTF-8\n");
out.write("Content-Length: " + message.length() + "\n");
out.write("\n");
out.write(message);
out.flush();
消息变量包含一个JSON字符串。当我想返回一个只包含ASCII字符的简单字符串时,这没关系-浏览器可以获取所有内容:

{"data":[{"name":"{\"nick\":\"abc\",\"message\":\"czesc\"}","event":"message"}],"id":"cb822555313d73a697e5f908b1f21fff5eb85fedf062f301a4932d9547c1d266"}
但当消息包含波兰语字符时,例如:

{"data":[{"name":"{\"nick\":\"abc\",\"message\":\"cześć\"}","event":"message"}],"id":"cb822555313d73a697e5f908b1f21fff5eb85fedf062f301a4932d9547c1d266"}
浏览器仅接收以下内容:

{"data":[{"name":"{\"nick\":\"abc\",\"message\":\"cześć\"}","event":"message"}],"id":"cb822555313d73a697e5f908b1f21fff5eb85fedf062f301a4932d9547c1d266
正如您所看到的,它是相同的字符串,但没有最后两个字符

为什么?

记住,“长度”必须包括Unicode转换所需的多个字符。您的UTF8字符占用的空间不止一个字符。您需要计算真正的消息长度,而不仅仅是字符串的长度,在Java中,字符串的长度始终是UTF16

ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
OutputStreamWriter out = new OutputStreamWriter(bytesOut, "UTF8");


out.write(yourString);
out.flush();
byte[] tstBytes = bytesOut.toByteArray();

好的,但是我怎么做呢?