gpt4 book ai didi

Java 客户端/服务器不返回 UTF-8 字符串

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

我尝试通过 Java 套接字传递 UTF-8 字符串。

字符串包含英语和希腊语的混合。

我的问题是,当消息通过套接字时,所有希腊字符都会变成“?”。

我已经尝试将 InputStream 字符集设置为 UTF-8。

以下是我的尝试,任何帮助将不胜感激。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class Main {
public static void main(String[] args) {
try {
String msg = "This is a test - Αυτο ειναι μια δοκιμη";
ServerSocket serverSocket = new ServerSocket(9999);

Thread host = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Socket socket = serverSocket.accept();

if (socket != null) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8));

while (true) {
String line = bufferedReader.readLine();

if (line != null) {
System.out.println(line);
} else if(bufferedReader.read() < 0) {
break;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
});

host.start();

Socket socket = new Socket("127.0.0.1", 9999);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}

编辑 1

我通过 IntelliJ Idea 运行并构建我的代码,这就是我发现问题的地方。

但是在 @Ihar Sadounikau 评论后,我更新了我的 JDK,并尝试通过 PowerShell 构建和运行,但问题仍然存在。

这是我的结果

& 'C:\Program Files\Java\jdk-13.0.2\bin\java.exe' Main
This is a test - ??τ? ε??α? ??α δ?????

最佳答案

使用这一行: PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true); 您正在转换字节流(即 InputStream/OutputStream 转换为字符流(即 Reader/Writer)。无论何时执行此操作,如果未能指定编码,您都会获得平台默认值,这不太可能你想要什么。

您(和@IharSadounikau)看到了不同的结果,因为“平台默认值”正在您身上切换。这是您永远不想使用它的原因之一。找出你的代码存在的错误,只有当你的平台默认编码与开发它的人相同时它才有效 - 通常是不可测试的

尝试new PrintWriter(socket.getOutputStream(), true, StandardCharsets.UTF_8)

关于Java 客户端/服务器不返回 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60592724/

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