Powershell, перекрывающий Perl binmode?

У меня есть скрипт Perl, который создает двоичный файл при сканировании очень большого текстового файла. Он выводит в STDOUT, который я перенаправляю в командной строке в файл.

Чтобы оптимизировать его, я делаю изменения, а затем вижу, как мало нужно бежать. В Linux для этого я использую команду "время". В Windows лучшим способом определения времени работы программы была "мера-команда" PowerShell. Казалось, это работает нормально, но я заметил, что сгенерированные файлы были больше. При проверке я обнаружил, что файлы, созданные в PowerShell, начинаются с спецификации и содержат пары CRLF!

Мой Perl-скрипт имеет директиву binmode STDOUT и работает правильно в обычном DOSBox.

Это ошибка или сбой в PowerShell или мера-команда? Повлияло ли это на создание других двоичных файлов другими средствами, кроме Perl?

Поиск в Google ничего не дал. Я использую Perl 5.12, PowerShell v1.0 и Windows XP.

1 ответ

Решение

Это связано с тем, что PowerShell по умолчанию будет видеть выходные данные в виде строк. Строки в.NET имеют Unicode, поэтому это вывод по умолчанию для PowerShell.

Я предполагаю, что вы используете PowerShell для записи вывода в файл? Если это так, то использование "Set-Content -Encoding Byte" решит вашу проблему.

Measure-Command {& "c:\myscript.pl" | Set-Content "C:\myoutput.bin" -Encoding Byte}
Другие вопросы по тегам