2016-07-23 77 views
0

从Windows上的PowerShell运行Node.js假定stdout必须是UTF-16文本流。这对于将二进制Buffer对象发送到stdout的工具产生了令人惊讶的结果。有没有办法解决这个问题?从Windows PowerShell使用节点,我可以生成二进制输出到标准输出吗?

命令行例如:

node -e "process.stdout.write(new Buffer('abc'))" >tmp.dat 
  • 使用PowerShell,生成的文件,tmp.dat现在为12个字节长,而不是只有3个字节长。

  • 从CMD.EXE启动的完全相同的例子会生成预期的3字节文件。

P.S.我原本以为这是一个node.js问题,但现在清楚它是一个PowerShell问题。

+0

即使UTF-8也不会帮助你。两者都是文本编码,不能用于任意二进制数据。 – Joey

+0

'start node'-e“process.stdout.write(new Buffer(''abc''))”'-RedirectStandardOut tmp.dat -NoNewWindow -Wait' – PetSerAl

+0

感谢@PetSerAL,你绝对正确的做到了。虽然相当可恶。 –

回答

0

对此的最佳答案似乎是生成cmd.exe并使用它进行本地重定向,而不是依赖于PowerShell的重定向模型。这是一个有点古怪,因为它需要把重定向引号,如下所示:

cmd /c node -e "process.stdout.write(new Buffer('abc'))" '>tmp.dat'

它似乎真的太糟糕了,PowerShell不承认,因为“节点”是土生土长的命令任何重定向应该是使用本地重定向机制进行处理。

相关问题