Искаженный текст при чтении из внешнего процесса в 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
: