Я пытался передать строку UTF-8 через Java сокет.
Строка содержит смесь английского языка sh и греческого языка.
Моя проблема в том, что когда сообщение проходит через сокет, все греческие символы превращаются в «?».
Я уже пытался установить для набора символов 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: \ Программные файлы \ Java \ jdk-13.0.2 \ bin \ java .exe 'Main
Это тест - ?? τ? ε ?? α? ?? α δ ?????