You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:永久设置环境变量(所有会话有效)

  1. 打开系统属性 → 高级 → 环境变量
  2. 在系统变量中添加:
    • 变量名:SVN_I18N_NLS_LANG
    • 变量值:UTF-8
  3. 重启PowerShell后生效,无需每次设置编码

验证

执行上述设置后,再次运行脚本,变量中的文件名将正常显示非ASCII字符:

?    Test_äöü.txt

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:42:40