先把当时的情况摆出来。在 PowerShell 里 ollama run 对话,中文回答显示成方块和问号,同样的模型在网页端却完全正常,日志文件里也是乱码。
把日志和配置对完,能解释这个现象的基本就这几处。终端代码页是 936,与 UTF-8 输出不匹配。也可能是通过管道把结果写文件时用了默认编码。
不容易想到的是,Python 脚本 subprocess 读取时没有指定 encoding。还有一种情况,字体不支持中文,显示成方块但数据本身没问题。
动手时先把当前代码页切到 UTF-8
chcp 65001
PowerShell 输出编码也统一设置
[Console]::OutputEncoding = [Text.Encoding]::UTF8
子进程读取时显式指定编码
subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8')
剩下的就是把结果重定向到文件后用 UTF-8 打开验证
ollama run qwen2.5:7b "你好" > out.txt; Get-Content out.txt -Encoding UTF8
怎么算真的好了,看的是同一批现象。终端里中文正常显示,写出的文本文件用编辑器打开没有乱码,脚本读取的字符串长度与预期一致。
提醒一点。chcp 只影响当前窗口,换个终端又会恢复,真正稳定的做法是在脚本里显式指定编码,而不是依赖系统默认值。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。