PowerShell中Subversion命令非ASCII字符输出乱码问题求助
PowerShell中Subversion命令非ASCII字符输出乱码问题
问题描述
在PowerShell脚本中调用Subversion命令时,若文件名包含非ASCII字符(如德语变音字母üöä),将命令输出保存到变量会出现乱码,但直接执行命令却能正常显示。
示例脚本:
$svnOutput = svn status Write-Host "Output when saved in a variable" $svnOutput Write-Host "Direct Output" svn status
实际输出对比:
Output when saved in a variable ? Test_���.txt Direct Output ? Test_äöü.txt
环境信息:
- 操作系统:Windows Server 2022
- VisualSVN Server版本:5.4.1
其他Subversion命令如svn add . --force也存在相同问题:
$svnOutput = svn add . --force $svnOutput
输出结果:
A Test_���.txt
直接执行该命令则显示正常。
已尝试的无效方案
已尝试以下方法但均未解决问题:
# 切换控制台代码页为UTF-8 chcp 65001 $svnOutput = svn status $svnOutput # 设置PowerShell输出编码 $OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 $svnOutput = svn status $svnOutput # 使用Out-String捕获输出 $svnOutput = & svn status | Out-String -Stream $svnOutput # 输出到文件再读取 svn status > svn_status.txt $svnOutput = Get-Content -Path "svn_status.txt" -Encoding UTF8 $svnOutput
解决方案
问题根源在于Subversion命令行客户端默认使用系统OEM编码输出,而非UTF-8。通过设置环境变量强制SVN输出UTF-8,同时确保PowerShell正确解码即可解决:
方法1:临时设置环境变量(当前会话有效)
# 设置SVN强制输出UTF-8 $env:SVN_I18N_NLS_LANG = "UTF-8" # 确保PowerShell用UTF-8解码外部命令输出 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 # 现在捕获输出即可正常显示 $svnOutput = svn status $svnOutput
方法2:永久设置环境变量(所有会话有效)
- 打开系统属性 → 高级 → 环境变量
- 在系统变量中添加:
- 变量名:
SVN_I18N_NLS_LANG - 变量值:
UTF-8
- 变量名:
- 重启PowerShell后生效,无需每次设置编码
验证
执行上述设置后,再次运行脚本,变量中的文件名将正常显示非ASCII字符:
? Test_äöü.txt
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

