Почему некоторые символы ASCII и Unicode не могут записывать в командную строку с java? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь написать консольную карточную игру с java. и я должен использовать эти символы ♥ ♦ ♣ ♠. Но при запуске программы в командной строке символы выглядят как? ? ? ? , Я пробую Unicode и ASCII, и я получил те же результаты. Я использую интеллигентную идею. и я могу написать эти символы Ascii 217┘ 218┌ 191┐ 192└ 196─

Я пытаюсь напечатать их как

System.out.println("♥")

или

System.out.println(Character.toString('\u2661'))

Unicode-символы \ u2661 ... и так далее. ASCII 3 4 5 6

Работает на терминале Intellij Idea. когда я пытаюсь написать вручную в командной строке alt + 3, я могу написать ♥, но при запуске игры это выглядит как?

здесь png моей кодировки по умолчанию. xml

здесь вывод консоли Inellij

и здесь вывод консоли cmd

────────── ──────────────────────────────────────────

Редактировать:

try {
        if (System.getProperty("os.name").contains("Windows")){
            new ProcessBuilder("cmd", "/c", "chcp 65001").inheritIO().start().waitFor();
        }
} catch (IOException | InterruptedException ex) {}

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Все, что вам действительно нужно было вставить, это System.out.println("♥"), остальное не имеет значения.

В вашем вопросе недостаточно информации для правильного ответа. Я думаю, что это один из этих трех:

[1] ваш файл находится в некоторой кодировке кодировки (скажем, UTF-8), но прогон javac, который делает файл класса настроенным с -encoding ISO-8859-1 или что-то еще, кроме UTF-8. Если вы позволяете intellij скомпилировать его для себя, я сомневаюсь, что это так.

[2] консоль, на которой вы ее запускаете (возможно, представление intellij в консоли), также имеет кодировку charset и это не UTF_8.

[3], это UTF-8 на всем пути вниз, но шрифт, используемый для его визуализации, не имеет доступного для него символа. Это также маловероятно; обычный способ визуализации отсутствующего символа - это прямоугольник или ромб с вопросительным знаком внутри, а не простой символ? Или это то, что вы видите?

0 голосов
/ 19 марта 2020

Предполагая, что вы пытаетесь печатать, используя System.out, попробуйте следующее:

import java.io.PrintStream;
import static java.nio.charset.StandardCharsets.UTF_8;

public class App {

    public static void main(String[] args) {
        System.out.println("First attempt: ♣");
        PrintStream out = new PrintStream(System.out, true, UTF_8);
        out.println("Second attempt: ♣");
    }
}

В моей среде это выводит следующий вывод:

First attempt:  ?
Second attempt: ♣

В некоторых случаях это может все еще быть недостаточно, в зависимости от того, как вы выполняете свой код. Например, если вы запускаете его внутри NetBeans, возможно, потребуется добавить следующее к параметрам запуска Netbeans:

-Dfile.encoding=UTF-8
...