Школа физики

Школа физики

Персональный сайт учителя физики
Лях Владимира Петровича

Понедельник, 20 октября 2014 00:00

Как решить проблему кодировки текста в PowerShell

Автор
Оцените материал
(3 голосов)

Сделать это, оказалось, несложно, но возникла небольшая проблема: часть текста отчёта получилась непонятными символами, какими-то "кракозябрами". Решить проблему удалось конвертацией текста в другой формат.

Функция для конвертации:

 
  1. function ConvertTo-Encoding ([string]$From, [string]$To){  
  2.     Begin{  
  3.         $encFrom = [System.Text.Encoding]::GetEncoding($from)  
  4.         $encTo = [System.Text.Encoding]::GetEncoding($to)  
  5.     }  
  6.     Process{  
  7.         $bytes = $encTo.GetBytes($_)  
  8.         $bytes = [System.Text.Encoding]::Convert($encFrom$encTo$bytes)  
  9.         $encTo.GetString($bytes)  
  10.     }  
  11. }  

Функция берет строку или массив строк на вход, и в качестве параметров указываются названия исходной и нужной кодировок (см. Get-Encodings).

Например:

 
  1. PS C:\windows\system32> "Конвертировать" | ConvertTo-Encoding cp866 windows-1251  
  2. ¦юэтхЁЄшЁютрЄ№  
 
  1. PS C:\Windows\system32> "¦юэтхЁЄшЁютрЄ№" | ConvertTo-Encoding windows-1251 cp866  
  2. Конвертировать  

Ещё один ньюанс. Когда пытался передать данные в ConvertTo-Encoding через конвейер, ничего не вышло. Пришлось сначала выводить текст через конвейер в Out-String, а из него, так же конвейером в ConvertTo-Encoding.

Источник конвертера: xaegr.wordpress.com

Донец 14

Выпускник школы

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


Защитный код
Обновить

Комментарии

  • Евгений Евгений 25.11.2017 16:51
    Наконец то Урок по всем современным требованиям. Мугамба доволен!!!!!!!!! Не просто СПАСИБО! А ...

    Подробнее...

     
  • Олег Олег 02.11.2017 16:17
    Владимир, а где сегодня можно купить омагничиватель воды СО-2 или СО-3?

    Подробнее...

     
  • Тимур Тимур 22.09.2017 08:36
    Доброго времени суток, на вашем сайте наткнулся на фотографию учебного вольтметр-термо метра ...

    Подробнее...