У меня возникла проблема в 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
Как настроить вывод консоли для правильной обработки символов вертикальной табуляции?
Я перешел на моноширинный шрифт в разделе «Файл» -> «Настройки» -> «Редактор» -> «Шрифт». У меня это не работает
Некоторые невидимые управляющие символы (например, символы вертикальной табуляции (U+000B)) не поддерживаются современным терминалом или редактором.
Итак, как я могу их протестировать?
Используйте 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");
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 CMD
Windows PowerShell
Удивительный. Большое спасибо, извините за поздний ответ.
Проверьте свой шрифт. Убедитесь, что вы используете моноширинный шрифт.