Больше года назад я написал функцию для перекодировки текста из одной кодировки в другую, с помощью функций .Net, однако недавно выяснилось (спасибо Евгению) что у .Net есть проблемы при конвертации в cp866. Так что я написал заглушку которая перекодирует текст в cp866, без использования .Net
ConvertTo-cp866.ps1
Begin { $ll = @' ЎўЈ¤Ґ¦§Ё©Є«¬®Їабвгдежзийклмноп '@ $ul = @' ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ '@ } Process{ [string]::Join("", $( [int[]][char[]]$_ | foreach { if ($_ -ge 1072 -and $_ -le 1103) { $_ = [int]$ll[$_ - 1072] } elseif ($_ -ge 1040 -and $_ -le 1071) { $_ = [int]$ul[$_ - 1040] } [char]$_ } ) ) }
Чутье подсказывает что можно написать сильно проще, но сейчас в голову ничего не лезет
Использовать так:
[PS C:\Root] "abcdefABCDEFабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" | >> ConvertTo-cp866.ps1 abcdefABCDEF ЎўЈ¤Ґ¦§Ё©Є«¬®ЇабвгдежзийклмнопЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ [PS C:\Root] "abcdefABCDEFабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" | >> ConvertTo-cp866.ps1 | ConvertTo-Encoding cp866 windows-1251 abcdefABCDEFабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
На всякий случай выкладываю в виде файла (а то вордпресс опять какие-нибудь символы переврет).








