$svnOutput = svn status
Write-Host "Output when saved in a variable"
$svnOutput
Write-Host "Direct Output"
svn status
如果我运行此脚本(在PowerShell-Console中),我会得到两个不同的输出,如果其中一个文件的名称中具有非ASCII-Character(在我的示例中,例如Umlauts,例如Umlauts)。这是输出
Output when saved in a variable
? Test_äöü.txt
Direct Output
? Test_���.txt
我正在使用VisualSVNServer版本5.4.1的Windows Server 2022工作。我已经测试了以下想法:
chcp 65001
$svnOutput = svn status
$svnOutput
$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$svnOutput = svn status
$svnOutput
$svnOutput = & svn status | Out-String -Stream
$svnOutput
svn status > svn_status.txt
$svnOutput = Get-Content -Path "svn_status.txt" -Encoding UTF8
$svnOutput
$svnOutput = & svn status | Out-String -Stream
$svnOutput
但所有这些都会出现相同的错误。
PS:这也与其他命令一样发生了
$svnOutput = svn add . --force
$svnOutput
导致:
A Test_���.txt
typing
svn add . --force
在PowerShell实例中,甚至我的脚本也无问题。希望有人可以在这里帮助我 - 谢谢!
您应该将编码的PowerShell控制台设置为SVN期望的编码。在大多数情况下,这将是系统的默认编码,但是您也可以与其他一些人进行测试。
$OutputEncoding = [System.Text.Encoding]::GetEncoding(1252)
[Console]::OutputEncoding = $OutputEncoding
$svnOutput = svn status
Write-Host "Output when saved in a variable"
$svnOutput
Write-Host "Direct Output"
svn status
$OutputEncoding
[Console]::OutputEncoding = $OutputEncoding
$OutputEncoding
,因此PowerShell终端可以正确显示字符。当捕获
$svnOutput = svn status
时,PowerShell现在使用SVN的编码来解释SVN的字节。