2015-10-07 70 views
2

我試圖捕獲從npm我從PowerShell運行的標準輸出。 Npm下載缺少的軟件包並輸出適當的樹。從Utf8字符本機應用程序存儲標準輸出

它看起來像什麼:

enter image description here

這是正確的輸出。

當我嘗試從PowerShell中做同樣的拍攝結果,我沒有能夠得到相同的字符:

Captured via Tee-Object

這是一樣的,當我使用

  • gpm install | Tee-Object -FilePath
  • gpm install | Out-File -FilePath .. -Encoding Unicode # or Utf8
  • $a = gpm install

當我在cmd.exe的輸出redircect到一個文件,內容是這樣的: enter image description here

我該如何正確捕獲輸出在PowerShell中?

+2

試試這個'[Console] :: OutputEncoding = [Text.Encoding] :: UTF8'。 – PetSerAl

+0

這是有效的。只需添加它作爲評論,我會接受它。關於背景/內部的任何解釋? – stej

回答

4

PowerShell是基於對象的管道的基於對象的外殼,但對於本機應用程序,管道是基於字節流的。所以當PowerShell將數據傳遞給本地應用程序時,必須將其轉換爲字節流。即使將數據從一個本地應用程序傳輸到另一個本地應用程序或將本機應用程序的輸出重定向到文件,也會發生此轉換。

當PowerShell從本機應用程序接收數據時,它將字節流解碼爲一個字符串,並將該字符串拆分爲換行符。將字節流解碼爲字符串PowerShell使用控制檯的輸出編碼:[Console]::OutputEncoding。如果你知道你的應用程序中使用不同的輸出編碼,你可以明確地更改控制檯的輸出編碼,以滿足您的應用的:

[Console]::OutputEncoding=[Text.Encoding]::UTF8 

當PowerShell的將數據傳送給本機應用程序,它的對象轉換爲使用指定的編碼字符串在$OutputEncoding首選變量中。

相關問題