Я использую Windows, я использую vscode, обновленную версию, терминал там использует кодировку utf8, я проверил с помощью chcp - возвращает 65001, то же самое касается cmd, поэтому я не думаю, что это проблема с терминалом, я попробовал перебрать Java System.out в utf-8, это не помогло
Код: Выделить всё
System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8));
например:
Код: Выделить всё
String random = "háló";
System.out.println(random);
Я пробовал Scanner, BufferedReader, InputStreamReader , конвертируем в байты
Код: Выделить всё
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in, StandardCharsets.UTF_8)
);
System.out.println("Enter some text (UTF-8 characters supported):");
String userInput = reader.readLine();
// Print the user input to verify
System.out.println("You entered: " + userInput);
byte[] bytes = userInput.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(bytes));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Код: Выделить всё
Enter some text (UTF-8 characters supported):
háló
You entered: hl
[104, 0, 108, 0]
РЕДАКТИРОВАТЬ:
Новые результаты/упоминание ранее пропущенные вещи:
чтобы я мог запустить чат Python до того, как он смог использовать символы в кодировке utf 8 и правильно их распечатать, как я уже упоминал в Java, я тоже смог их распечатать, если я предварительно установил их на переменная, но не тогда, когда я возвращаю их из пользовательского ввода.
Я скачал intellij, опробовал больше терминалов и обнаружил, что он работает правильно в intellij и bash (с подсистемой Windows для Linux) :
Intellij:
Код: Выделить всё
Enter some text (UTF-8 characters supported):
háló
You entered: háló
[104, -61, -95, 108, -61, -77]
Код: Выделить всё
root@DESKTOP:/mnt/x/javaProjects/UTF 8 SUFFERING# java Main
Enter some text (UTF-8 characters supported):
háló
You entered: háló
[104, -61, -95, 108, -61, -77]
root@DESKTOP:/mnt/x/javaProjects/UTF 8 SUFFERING# java -version
openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Ubuntu-122.04.1, mixed mode, sharing)
Теперь я попробовал cmd, powershell, git bash, терминал vscode, и они не работают.
Я также пробовал разные шрифты, предложенные SedJ601
, и это было интересно, потому что по умолчанию я использовал консоли в cmd, который поддерживает символы utf8 (поэтому он распознавал символы типа «á» и отображал их правильно, но когда Java возвращал его из пользовательский ввод, это не сработало):
Код: Выделить всё
Enter some text (UTF-8 characters supported):
háló
You entered: h l
[104, 0, 108, 0]
Код: Выделить всё
Enter some text (UTF-8 characters supported):
háló
You entered: h�l�
[104, -17, -65, -67, 108, -17, -65, -67]
У меня последняя версия Java.
Код: Выделить всё
X:\javaProjects\UTF 8 SUFFERING>java -version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment Temurin-17.0.11+9 (build 17.0.11+9)
OpenJDK 64-Bit Server VM Temurin-17.0.11+9 (build 17.0.11+9, mixed mode, sharing)
Код: Выделить всё
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
set JAVA_OPTS=-Dfile.encoding=UTF-8
Код: Выделить всё
X:\javaProjects\UTF 8 SUFFERING>java -XshowSettings:properties -version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Property settings:
file.encoding = UTF-8
Подробнее здесь: https://stackoverflow.com/questions/786 ... ed-strings