LINUX.ORG.RU
ФорумAdmin

Из linux по ssh на cygwin ssh server - проблема с кодировкой нативных приложений win7

 ,


0

1

ВОПРОС: как указать кодировку отдельной исполняемой команде или всем родным командам венды?

Есть сервер cygwin на win7. Всё настроено и работает, пока я подключаюсь к нему по ssh из linux и не запрашиваю вывода написанных под венду програм.

То есть linux стайл команды (ls,cat,grep и другие), нормально отображают русские буквы, а если запрошу вывод openfiles.exe /? но получаю вместо русских букв кракозябры или ничего.

Менять кодировку для всей сессии ssh нельзя - начинает неправильно выводиться вообще всё:
luit -encoding "cp1251" ssh IP

Варианты под конкретную строку уже из-под ssh сессии на сервере тоже не срабатывают:
LANG=ru_RU.CP1251 openfiles.exe /?
export LANG=ru_RU.CP1251;openfiles.exe /?

Как в данном случае лучше и проще всего указать кодировку?

Ответ на: комментарий от sanekmihailow

нет, ни один из вариантов не срабатывает для win приложений. для приложений cygwin с unixовым stdout срабатывает.

hikikomori ★★★
() автор топика
Ответ на: комментарий от iTA05

Понимаете, дело не в том, что я кодировкой ошибся, дело втом, что все эти команды меняют кодировку всей подключённой удалённой консоли, а тогда будет неправильно отображаться всё остальное, а проблема в том, что консоль cygwin транслирует вывод команд рассчитанных на cmd.exe как есть, без перекодировки. даже если в консоли cygwin запустить cmd ситуация не изменится. поэтому надо или что-то крутить в cygwin или для конкретной команды или группы указывать в какой кодировке её выводить.

А насчёт 866 то её нет ни в manjaro ни в cygwin:

export LC_MESSAGES=CP866 ;
bash: предупреждение: setlocale: LC_MESSAGES: не удаётся изменить язык (CP866): Нет такого файла или каталога


export LC_MESSAGES=CP866 ; openfiles
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (CP866): No such file or directory
      ���஡��� ᬮ��� Openfiles /?.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от iTA05
export LC_MESSAGES=ru_RU.CP866
openfiles.exe



Результат по-брежнему:

���ଠ��: ���� "����஥��� ᯨ᪠ ��ꥪ⮢" ������

hikikomori ★★★
() автор топика

Задача, похоже, универсального решения не имеет. Изменение переменных LC_* влияет только на компоненты cygwin’а.
Главная проблема в том, что утилиты windows используют как 866, так и 1251 страницы.

$ openfiles.exe /? | iconv -f CP866 | sed -n 2p
OPENFILES /<параметр> [<аргументы>]
$ certutil.exe /? | iconv -f CP1251 | sed -n 2p
Действия:
$ ls --help | sed -n 2p
Выдаёт информацию о ФАЙЛАХ (по умолчанию о текущем каталоге).
$ locale | sed -n 1p
LANG=ru_RU.UTF-8
$ uname -srm
CYGWIN_NT-10.0 3.0.6(0.338/5/3) x86_64
$ 
Deleted
()
Ответ на: комментарий от Deleted

Большое спасибо, это помогло.
Жаль, что сам cygwin не конвертирует на лету.

hikikomori ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.