Можно ли с помощью Node из Windows PowerShell генерировать двоичный вывод в stdout?
При запуске Node.js из PowerShell в Windows предполагается, что стандартный вывод должен быть текстовым потоком UTF-16. Это приводит к неожиданным результатам для инструментов, которые отправляют двоичные объекты Buffer на стандартный вывод. Есть ли способ обойти это?
Пример командной строки:
node -e "process.stdout.write(new Buffer('abc'))" >tmp.dat
Используя PowerShell, полученный файл tmp.dat теперь имеет длину 12 байтов, а не только 3 байта.
Точно такой же пример, запущенный из CMD.EXE, создает ожидаемый 3-байтовый файл.
PS Первоначально я думал, что это вопрос node.js, но теперь ясно, что это проблема PowerShell.
1 ответ
Лучшим ответом для этого, похоже, является создание cmd.exe и выполнение собственного перенаправления с ним, а не зависимость от модели перенаправления PowerShell. Это немного странно, так как требует помещения перенаправления в кавычки следующим образом:
cmd /c node -e "process.stdout.write(new Buffer('abc'))" '>tmp.dat'
Очень плохо, что PowerShell не распознает, что, поскольку "узел" является встроенной командой, любое перенаправление должно обрабатываться с использованием встроенных механизмов перенаправления.