记录一下那天晚上的排查过程。Agent 在 Windows 上用 subprocess 执行 ipconfig,返回的中文全是乱码,日志里编码标着 gbk,模型据此判断命令失败并反复重试同一个工具。

刚开始盯着「没有显式指定 encoding 和错误处理」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。Windows 控制台默认使用 GBK 代码页。还有一种是subprocess 传了 text=True,按 locale 解码。

少数情况下是输出过长被截断,乱码进一步放大。

调用时显式指定 utf-8 和替换策略

python -c "print('subprocess.run(cmd, capture_output=True, text=True, encoding=\'utf-8\', errors=\'replace\')')"

接着把代码页切到 UTF-8 再执行

chcp 65001

然后改用 PowerShell 并指定输出编码

powershell -NoProfile -Command '[Console]::OutputEncoding=[Text.Encoding]::UTF8; ipconfig'

剩下的就是在工具层统一做一次编码探测和转换

python -c "print('detect encoding then decode')"

怎么算真的好了,看的是同一批现象。返回内容里的中文能正常显示,模型不再因为乱码重试,日志中的编码字段是 utf-8。

这里还有个坑。Windows 上子进程的输出编码取决于控制台代码页,和 Python 源文件编码无关,工具封装层要显式指定,不能依赖默认值。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189