Вывод консоли IntelliJ IDEA неправильно отображает символы вертикальной табуляции (U + 000B)

У меня возникла проблема в IntelliJ IDEA, из-за которой в выводе консоли неправильно отображаются символы вертикальной табуляции (U+000B). Когда я запускаю следующий код:

public class Example {
    public static void main(String[] args) {
        System.out.println("Line 1\u000BLine 2\u000BLine 3");
    }
}

Вывод по IntelliJ IDEA 2023.3.4 (Ultimate Edition) — Windows 10:

Line 1Line 2Line 3

надеюсь результат будет следующим

Line 1
      Line 2
            Line 3

Шаги, которые я пробовал:

  • Я проверил параметр «Пользовательская виртуальная машина» в разделе «Справка» -> «Редактировать пользовательские параметры виртуальной машины» и добавил две строки, как показано ниже.
-Dconsole.encoding=UTF-8
-Dfile.encoding=UTF-8
  • Я проверил кодировку файлов UTF-8:

  • Я проверил Редактировать конфигурацию

Как настроить вывод консоли для правильной обработки символов вертикальной табуляции?

Проверьте свой шрифт. Убедитесь, что вы используете моноширинный шрифт.

Elliott Frisch 26.08.2024 00:10

Я перешел на моноширинный шрифт в разделе «Файл» -> «Настройки» -> «Редактор» -> «Шрифт». У меня это не работает

happy 27.08.2024 16:24

Некоторые невидимые управляющие символы (например, символы вертикальной табуляции (U+000B)) не поддерживаются современным терминалом или редактором.

life888888 28.08.2024 17:43

Итак, как я могу их протестировать?

happy 28.08.2024 18:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте escape-последовательность ANSI для управления положением курсора и цветами текста.

ваш vertical tab characters (U+000B) к терминалу ANSI — это перемещение курсора на следующую строку.

  • (1) Предположение наиболее близко к тому, что вы хотите сделать, ключевые слова: «Escape-код ANSI» и «Терминал ANSI».

  • (2) С помощью escape-кода ANSI вы можете управлять курсором, чтобы он перемещался на 1 строку вниз и на 5 символов влево. Даже пожалуйста, очистите весь экран

-(3) Но для этого требуется, чтобы Терминал поддерживал escape-код ANSI.

  • (4) Старая версия Windows 10 не поддерживает escape-код ANSI.

  • (5) Терминал в IDEA не поддерживает escape-код ANSI.

  • (6) Вам необходимо, чтобы функция управления положением курсора ANSI escape-кода вступила в силу только тогда, когда программа Java выполняется в обычной среде терминала.

public static final String ESC = "\u001B[";
public static final String VT = ESC + "1B";
System.out.println("Line 1" + VT + "Line 2" + VT + "Line 3");

ANSICursorAndColorDemo.java

public class ANSICursorAndColorDemo {
    // ANSI escape sequence constants
    public static final String ESC = "\u001B[";
    public static final String VT = ESC + "1B";
    public static final String TEXT_COLOR_RED = "31m";
    public static final String TEXT_COLOR_GREEN = "32m";
    public static final String BACKGROUND_COLOR_YELLOW = "43m";

    public static void main(String[] args) {
        // ANSI escape sequence: clear the entire screen
        System.out.print(ESC + "2J"); //"\033[2J" , "\u001B[2J"
        System.out.print(ESC + "H"); // Move the cursor to the upper left corner
        System.out.println("The screen is cleared!");

        // Move the cursor to row 12, column 12
        System.out.print(ESC + "12;12H");
        System.out.println("Move the cursor here: row 12 column 12");

        System.out.println("Line 1" + VT + "Line 2" + VT + "Line 3");

        // Set the text color to red
        System.out.print(ESC + TEXT_COLOR_RED);
        System.out.println("This is a red text");

        // Set the text color to green
        System.out.print(ESC + TEXT_COLOR_GREEN);
        System.out.println("This is a green text");

        // Set the background color to yellow and the foreground to blue
        System.out.print(ESC + "44;" + BACKGROUND_COLOR_YELLOW);
        System.out.println("Blue text, yellow background");

        // Reset Color
        System.out.print(ESC + "0m");
        System.out.println("Colors reset to default");

    }
}

Обратите внимание, что вы должны запускать его в среде, поддерживающей терминал ANSI. CMD в старых версиях Windows не поддерживается. PowerShell также не поддерживается. Он также не поддерживается в среде IDEA IDE.

Работает на «более новых версиях» Windows.

  • Оценочная версия Microsoft Windows 11 Корпоративная
  • 10.0.22621 Н/Д Сборка 22621

Windows CMD

Windows PowerShell

Не будет работать в старых версиях Windows:

  • Оценочная версия Microsoft Windows 10 Корпоративная
  • 10.0.17763 Н/Д Сборка 17763

Удивительный. Большое спасибо, извините за поздний ответ.

happy 30.08.2024 15:59

Другие вопросы по теме