Искаженный текст при чтении из внешнего процесса в Java

Я запускаю утилиту SSH в комплекте с Cygwin, используя ProcessBuilder Class в Java. Все отлично работает Я подключаюсь к серверу Linux через SSH, могу запускать команды и читать вывод.

Однако всякий раз, когда вывод возвращается, это происходит только после входа на сервер и выполнения команд, например, списка каталогов. ls, возвращает что-то вроде этого:

InputStream: root@myserver:/scripts/common# ls 
InputStream: [00m[00mA1-4.yaml[00m                            [01;32mscip-1.2.0.linux.x86_64.gnu.opt.qso[00m
InputStream: [00madditional_files.txt[00m                 [01;32mscip-1.2.0.linux.x86_64.gnu.opt.spx[00m

Насколько я понял, это происходит только с помощью команды листинга файлов. Например, когда я запускаю другие команды, такие как время и т. Д., Он показывает нормальный вывод.

Можете ли вы предложить, что именно добавляет эти случайные символы в имя файла?

Я даже пытался использовать кодировку UTF8, но ничего не изменилось. Когда я вхожу напрямую через командную строку, я не вижу этих результатов. Тем не менее, cmdline показывает имена файлов в цветных значениях. Это то, что добавлена ​​дополнительная информация, которая не является ASCII?

1 ответ

Решение

Используя команду ls --color=none решает эту проблему.

Это происходит потому, что по умолчанию команда ls возвращает имена файлов, к которым добавлены различные значения цветового кода. Эта ссылка дает больше информации.

Следующая картина описывает разницу между ls а также ls --color=none:

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