gpt4 book ai didi

java - 我向浏览器发送消息,但浏览器只收到部分消息

转载 作者:行者123 更新时间:2023-12-01 12:35:58 25 4
gpt4 key购买 nike

我用 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();

message 变量包含一个 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();

关于java - 我向浏览器发送消息,但浏览器只收到部分消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com