前言¶
DeepSeek Harness(DSH)通过插件扩展能力。在 Windows 环境下,DSH 自带的 pwsh 工具在执行命令时,中文及其他非 ASCII 字符容易出现乱码。这是因为原生程序的输出编码不统一:有的按系统 ANSI(如 GBK)输出,有的按 UTF-8 输出,而 DSH 内部统一按 UTF-8 解码,导致单一解码方式无法覆盖所有场景。
插件简介¶
本插件是 hongweifei/dsh-pwsh-encoding-fix,用于修复上述乱码问题。它是一个 Cordis 插件(bundle 型),通过在 PowerShell 进程内进行编码转换,确保 GBK 和 UTF-8 混排的输出都能正确显示。
核心功能¶
该插件具备以下能力:
* 自动识别编码:同一命令中混合了 GBK 与 UTF-8 输出也能逐段正确处理。
* 无损捕获:使用 Latin-1(代码页 28591)逐字节接收原生输出,不会把非法字节序列替换成占位符。
* 不改变命令语义:$? 与 $LASTEXITCODE 照常捕获,命令失败时退出码不变。
* 前台与后台命令都生效:包装发生在 shell.resolve 入口,覆盖前台 run 与后台 start。
* 只作用于 PowerShell:bash 执行器不受影响。
安装与启用¶
使用官方命令安装该插件:
dsh plugin --profile web add "github:hongweifei/dsh-pwsh-encoding-fix"
安装完成后,需重启 DSH Web 并进行硬刷新(Ctrl+F5)。
配置¶
默认情况下,插件会按系统 ANSI 代码页(Default)尝试解码非 UTF-8 字节。若需显式指定代码页(例如强制使用 GBK),可在 profile 的 cordis.patch.yml 中追加配置:
- insert:
- id: pwsh-encoding-fix
name: '@dsh-external/dsh-pwsh-encoding-fix'
config:
codePage: '936'
典型用法¶
在 pwsh 工具中执行以下命令进行验证:
# 测试 UTF-8 输出的程序
node -e "process.stdout.write('错误: 找不到符号\n')"
# 测试 GBK 输出的程序
ipconfig
注意事项¶
使用时需注意以下边界情况:
* Write-Host 输出:由于捕获期间编码被临时切换,Write-Host 的中文会被编码成 ?。建议改用 Write-Output。
* exit 命令:命令以 exit N 结尾时,该次输出会丢失(退出码仍正确)。
* PowerShell 5.1 参数:向原生程序传参含 . 时有拆参数问题,可改用环境变量(如 $env:JAVA_TOOL_OPTIONS)。
* 超大输出:超大输出会在 pwsh 内存中先聚合,管道的字节截断机制不受影响。
总结¶
该插件解决了 DSH 在 Windows 环境下处理 pwsh 命令编码不统一的问题,让中文输出和混合编码场景下的调试更加直观。
目录页:hongweifei/dsh-pwsh-encoding-fix
GitHub 仓库:hongweifei/dsh-pwsh-encoding-fix