2016-11-08 79 views
0
> cat .\foo.txt 
abc 

> cat .\foo.txt | md5sum 
c13b6afecf97ea6b38d21a8f5167fa1e *- 

> md5sum foo.txt 
b79545611b3be30f90a0d21ef69bca82 *foo.txt 

catmd5sum是unix端口(來自Windows Git發行版)。如何擺脫PowerShell的編碼地獄?

這是一個用於我的真實用例的玩具示例,它將二進制數據傳輸到舊式Python腳本,我無法更改。由於管道正在進行編碼,因此二進制文件已損壞。

我試着改變$OutputEncoding,[Console]::OutputEncoding和使用chcp,都沒有幫助(但也許我沒有做得對,這是非常複雜的......)。

PowerShell's pipe adds linefeed中的實用程序不適用於我,因爲它如何處理進程參數(我需要將某些參數傳遞給舊腳本,有些需要引用,但實用程序接受所有參數爲一個字符串)

最好的解決方案,讓我以某種方式告訴powershell完全關閉編碼,只是表現爲unix/cmd。

+0

請勿使用管道並將該文件指定爲md5sum的參數?或者使用非對象管道:'cmd/c cat。\ foo.txt「|」 md5sum' - 注意管道符號周圍的引號。 – wOxxOm

+0

我寫道,我給了一個玩具的例子,我的實際使用案例是一個腳本,必須接受來自stdin的輸入,我不能改變它。我已經嘗試了cmd/c,但它有問題與qouting,我會再試一次 – IttayD

+0

@wOxxOm:它終於與cmd一起工作,但我希望我可以使用PS – IttayD

回答

0

有沒有辦法解決它,除了使用cmd來運行這些命令包括管道:

cmd /c cat.exe .\foo.txt "|" md5sum 

注意管道符是引用,所以它是由cmd並沒有PowerShell的解釋。

0

如果您使用的Get-Content小命令,然後按照在https://technet.microsoft.com/en-us/library/hh847788.aspx給予處理二進制數據推薦:

讀取和寫入到二進制文件時,請使用字節值的編碼動態參數和ReadCount參數的值爲0。

無論您是否正在使用Get-Content,你可能會想避免永遠不必表示爲String您的數據。 String類型專爲字符數據而設計,並且不適合處理二進制數據。

+0

我很確定這是導致所有問題的管道。我已經使用了unix貓,但嘗試了powershell,但仍然有不同的結果 – IttayD