2016-12-09 14 views
4

Я создаю программу на Java, которая использует меню с разными цветами, используя escape-коды ANSI. Что-то вродеПроверьте, поддерживает ли консоль escape-коды ANSI в Java

System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m"); 

Проблема в том, что я хочу, чтобы проверить, если консоль, где код будет выполняться поддерживает использование этого кода, так и в случае, если это не так, печатать альтернативную версию без кодов.

Это будет что-то подобное:

if(console.supportsANSICode){ 
    System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m"); 
} 
else{ 
    System.out.println("Menu option"); 
} 

Есть ли способ в Java, чтобы проверить это?

+0

Дело в том, что проверка того, поддерживает ли консоль escape-коды ANSI, не лучший способ сделать это. Фактически, вы должны использовать 'PrintWriter', на' System.out', чтобы вы могли установить на нем тип кодировки – DamCx

ответ

1

Я не знаю, есть ли у Java какой-то особый способ справиться с этим, но есть два способа справиться с самой проблемой. Обычный метод, используемый (по крайней мере, в мире unix), заключается в том, чтобы получить терминал, используемый из переменной окружения TERM, и посмотреть его возможности из базы данных terminfo/termcap (обычно с использованием curses или slang). Еще один грубый подход - отправить код отчета о статусе устройства ("\u001B[6n") и проверить, отвечает ли терминал. Это, конечно, немного хак, поскольку терминал, который поддерживает DSR-код, может не поддерживать цвет, например.