hongweifei/dsh-pwsh-encoding-fix
hongweifei★ 0JavaScriptLast synced: 2026-08-15
修复 DeepSeek Harness (DSH) pwsh 工具的中文/非 ASCII 输出乱码;Fix garbled pwsh tool output on Windows for DeepSeek Harness.
README excerpt
dsh-pwsh-encoding-fix 一个用于 DeepSeek Harness(DSH) 的 Cordis 插件(bundle 型),修复 DSH 的 pwsh 工具在 Windows 上执行命令时,中文及其他非 ASCII 输出变成乱码的问题。 简介 DSH 的 pwsh 工具会在 Windows 上执行 PowerShell 命令,并把命令的 stdout/stderr 回传给你。在中文 Windows 上,原生程序的输出编码并不统一: - 有的程序按 系统 ANSI 代码页 输出(中文系统即 GBK/936,如 ipconfig 、 systeminfo 、 chcp 、直接调用的 javac 等); - 有的程序按 UTF-8 输出( node 、 git 、Maven 3.9+、Gradle 9 的编译诊断、 Java 18+ 等)。 而 DSH 内部只按 UTF-8 解码输出,于是 任何单一解码方式都会让其中一类程序 变成乱码 :GBK 输出按 UTF-8 解码会得到 锟斤拷 一类的替换字符,UTF-8 输出 按 GBK 解码会得到 閿欒 一类的错字( 错误 → 閿欒 )。 本插件在 PowerShell 进程内做一次「按字节无损捕获 → 自动识别编码 → 以 UTF-8 重新输出」的转换,让两类程序的输出都能正确显示。 特性 - 自动识别编码 :同一命令里 GBK 与 UTF-8 输出混排也能逐段正确处理; - 无损捕获 :用 Latin-1(代码页 28591)逐字节接收原生输出,不会把非法 字节序列替换成 U+FFFD,信息不会丢失; - 不改变命令语义 : $? / $LASTEXITCODE 照常捕获,命令失败时退出码不变; - 前台与后台命令都生效 :包装发生在 shell.resolve ( run 与 start 共同经过的入口); - 只作用于 PowerShell :bash 执行器不受影响;沙箱执行器(pwsh-sandbox) 自身的逻辑被保留(包装而非替换)。 工作原理 问题背景 DSH 的 pwsh 执行器( @deepseek-ai/dsh-pwsh-local )会为每条命令前置 [Console]::OutputEncoding = UTF8 ,Node 侧收集器也只按 UTF-8 解码管道。 以两种典型的程序输出为例: 程序输出 实际字节 按 UTF-8 解码 按 GBK 解码 ipconfig 、直接调用的 javac GBK U+FFFD 乱码 正确 node 、Maven 3.9+、Gradle 9 UTF-8 正确 閿欒 乱码 早期的 v1 版本固定按系统 ANSI 代码页解码,修好了 GBK 一类,却把 UTF-8 一类弄成了新的乱码( 错误 → 閿欒 )。v2 改为逐字节捕获后再自动判断。 …
View full README on GitHub →