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

720
hippietrail

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

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

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

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

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

0
Неверный ответ ... вы можете спросить об этом в stackoverflow. Joe Internet 13 лет назад 0
Да, было сложно решить, о каком сайте спрашивать. Я пошел с этим, потому что это было больше об особенностях инструментов, чем алгоритме или структурах данных, но я переместу это, если никто не отвечает здесь (-: hippietrail 13 лет назад 0

1 ответ на вопрос

0
JasonMArcher

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

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

Measure-Command {& "c:\myscript.pl" | Set-Content "C:\myoutput.bin" -Encoding Byte} 
Так | Set-Content "C: \ myoutput.bin" похож на> "C: \ myoutput.bin" в DOS или Unix с символом канала, который также используется для перенаправления? hippietrail 13 лет назад 0
Это символ трубы и используется так же, как оболочки DOS и Unix. В этом случае вы используете Set-Content, чтобы мы могли использовать байтовую кодировку. JasonMArcher 13 лет назад 0