使用 Windows PowerShell 中的 Node,我可以生成二进制输出到标准输出吗?
Using Node from Windows PowerShell, can I generate binary output to stdout?
运行 Node.js 来自 Windows 上的 PowerShell 假定标准输出必须是 UTF-16 文本流。对于将二进制 Buffer 对象发送到 stdout 的工具,这会产生令人惊讶的结果。有没有办法解决这个问题?
命令行示例:
node -e "process.stdout.write(new Buffer('abc'))" >tmp.dat
使用 PowerShell,生成的文件 tmp.dat 现在长 12 个字节,而不是只有 3 个字节长。
从 CMD.EXE 启动的完全相同的示例生成预期的 3 字节文件。
P.S。我最初认为这是一个 node.js 问题,但现在很清楚这是一个 PowerShell 问题。
对此的最佳答案似乎是生成 cmd.exe 并使用它进行本机重定向,而不是依赖于 PowerShell 的重定向模型。这有点奇怪,因为它需要将重定向放在引号中,如下所示:
cmd /c node -e "process.stdout.write(new Buffer('abc'))" '>tmp.dat'
由于 "node" 是本机命令,因此 PowerShell 无法识别这一点真的太糟糕了,任何重定向都应使用本机重定向机制来处理。
运行 Node.js 来自 Windows 上的 PowerShell 假定标准输出必须是 UTF-16 文本流。对于将二进制 Buffer 对象发送到 stdout 的工具,这会产生令人惊讶的结果。有没有办法解决这个问题?
命令行示例:
node -e "process.stdout.write(new Buffer('abc'))" >tmp.dat
使用 PowerShell,生成的文件 tmp.dat 现在长 12 个字节,而不是只有 3 个字节长。
从 CMD.EXE 启动的完全相同的示例生成预期的 3 字节文件。
P.S。我最初认为这是一个 node.js 问题,但现在很清楚这是一个 PowerShell 问题。
对此的最佳答案似乎是生成 cmd.exe 并使用它进行本机重定向,而不是依赖于 PowerShell 的重定向模型。这有点奇怪,因为它需要将重定向放在引号中,如下所示:
cmd /c node -e "process.stdout.write(new Buffer('abc'))" '>tmp.dat'
由于 "node" 是本机命令,因此 PowerShell 无法识别这一点真的太糟糕了,任何重定向都应使用本机重定向机制来处理。