2016-07-23 79 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不承認,因爲「節點」是土生土長的命令任何重定向應該是使用本地重定向機制進行處理。

相關問題