Powershell – перекодировка для консольных утилит


Традиционные приложения (native application) запускаемые в консоли cmd.exe, как правило не являются unicode-приложениями. Иначе говоря, они ожидают ввод и выводят информацию в обычной кодировке, например, CP866 или CP1251. С другой стороны, Powershell является unicode-приложением. Это означает, что Powershell должен выполнять перекодировку в обе стороны при вызове native application. По умолчанию он это делает в большинстве случаев правильно. Но если на целевой системе вместо кодировки по умолчанию для non-unicode программ стоит не «Русский», что соответствует CP866, а «Английский» — CP437, при работе «русской» native application мы получим проблемы: программа не будет понимать ввод, а ее вывод будет абракадаброй.

Ситуацию можно исправить. В Powershell за перекодировку отвечают две переменные:

[Console]::OutputEncoding : отвечает за перекодировку <native application> -> <Powershell>

$OutputEncoding : отвечает за перекодировку <Powershell> -> <native application>

(Есть ещё [Console]::InputEncoding, которая отвечает за ввод с клавиатуры в консольное приложение)

 

Есть ещё случай, когда вывод native application происходит не в консоль, а перехватывается Powershell (например, при удаленном вызове через WS-Management). Тогда полученные строки придётся перекодировать «вручную». Пример такого скрипта https://xaegr.wordpress.com/2007/01/24/decoder/

Спасибо за наводку Александр AKA Kazun

 

Примеры:

[Console]::OutputEncoding = [Text.Encoding]::Unicode

[Console]::OutputEncoding = [Text.Encoding]::UTF8

$OutputEncoding = [Text.Encoding]::GetEncoding(1251)

[Text.Encoding]::Unicode

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

%d такие блоггеры, как: