我搜索了很多,但我找不到解决问题的方法。我想从powershell调用exe并捕获输出。此输出我想在控制台中正确显示并将其写入文件:
$output = & ".\myExe.exe" $path
Write-Host $output
$output | Out-File -Append -Encoding UTF8 -filepath $destFile
这仅适用于非特殊字符。但是如果输出包含例如变形金刚(ä,ö,ü)它不起作用。然后我得到这样的东西:õ÷³
有人可以帮忙吗?
答案 0 :(得分:3)
我使用
解决了git
输出的类似问题
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
更新
事实上,我暂时更改编码只是为了调用git
function Invoke-Git($Command) {
${*OutputEncoding} = [Console]::OutputEncoding
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
try {
. $Command
if ($LASTEXITCODE) {Write-Error "Exit code: $LASTEXITCODE. Command: $Command" -ErrorAction 1}
}
finally {
[Console]::OutputEncoding = ${*OutputEncoding}
}
}
因此,如果更改编码会导致其他命令出现问题,那么请尝试使用此方法。
答案 1 :(得分:1)
公然mojibake案。让我们有下一个测试脚本,其中简单的控制台应用程序CliParser.exe
回应命令行参数(用C
编写,受启发here)
$destFile="d:\test\35909655-UTF8.txt"
Remove-Item $destFile
###
### [Console]::OutputEncoding = [System.Text.Encoding]::Default
###
$output = & "d:\bat\CliParser.exe" äöü
$output | Out-File -Append -Encoding UTF8 -filepath $destFile
"{0} {1} {2}" -f "Console code pages", [System.Console]::OutputEncoding.WindowsCodePage,
[System.Console]::OutputEncoding.CodePage
"{0} {1} {2}" -f "System code pages", [System.Text.Encoding]::Default.WindowsCodePage,
[System.Text.Encoding]::Default.CodePage
输出在各种情况下都会显示代码页中的差异;输出文件的编码为UTF-8
,因此无论活动代码页如何,get-content
都会正确显示它(请参阅下面的chcp 437
):
==> chcp 850
Active code page: 850
==> powershell D:\PShell\SO\35909655.ps1
Console code pages 1252 850
System code pages 1250 1250
==> powershell get-content "d:\test\35909655-UTF8.txt"
param 0 = D:\bat\CliParser.exe
param 1 = õ÷³
==> chcp 1250
Active code page: 1250
==> powershell D:\PShell\SO\35909655.ps1
Console code pages 1250 1250
System code pages 1250 1250
==> chcp 437
Active code page: 437
==> powershell get-content "d:\test\35909655-UTF8.txt"
param 0 = D:\bat\CliParser.exe
param 1 = äöü
==>
请忘记在上面的输出中显示代码页1252
(它只是我的默认值)。
回答:要在Powesthell脚本中处理案例,请使用(删除前导###
)
[Console]::OutputEncoding = [System.Text.Encoding]::Default