快速结论:这个报错通常出现在 Windows 上通过 llama-server 内置文件工具(write_file / read_file 等)创建非 ASCII 文件名时,磁盘上的真实文件名出现乱码。优先排查 Windows 侧的 UTF-8 到文件系统路径(cp866/OEM 代码页)转换是否失效。
适用环境:llama-server,Windows 10,version 9851 (0eca4d490),GGML backend CUDA,硬件 Ryzen 2700 + RTX 4090;模型为 Qwen3.5-27B-UD-Q4_K_M。Issue 中未提供 Python、PyTorch 版本信息,无需确认。
最快修复方案:暂无确认的一步修复方案。Issue 中提到的 Qwen 生成的补丁(fix_utf8_filepaths.patch、README_UTF8_FIX.md、INSTRUCTIONS.md)只是“partial solution”,并非官方验证方案;官方修复是后续的 #29415、#29475 等 Windows Unicode 路径清理提交。
注意事项:该 Issue 因 stale 自动关闭,但评论指出 bug 实际已在 2026 年 9 月底随 #29415 等修复落地。验证时不要只依赖 cmd.exe 的 dir 输出,控制台代码页会干扰观察,建议用 Python os.listdir() 做逐字符码点比对。
问题场景
在 Windows 10 上运行 llama-server,让模型调用内置文件工具(write_file / read_file)在服务器工作目录中创建带非 ASCII 名称的文件,例如让模型写入 Русский.md。工具返回值显示写入成功、路径正确,但在系统目录中看到的真实文件名变成乱码,例如 Р СѓСЃСЃРєРёР№.md。同样的现象也出现在创建非 ASCII 名称的文件夹时。用户尝试在 cmd.exe 中执行 chcp 65001 切换代码页,结果不变。
报错原文
Eval bug: llama-server tools using utf8 for a filename instead of cp866 for windows.
{"result":"file written successfully","path":"Русский.md","bytes":41}
dir output:
01.07.2026 18:35 41 Р СѓСЃСЃРєРёР№.md
The file name is not reencoded utf8->cp866.
原因分析
可能原因:llama-server 的文件工具在 Windows 上把来自模型工具调用的 UTF-8 路径字符串直接交给文件系统 API,而没有显式转换为 std::filesystem::path(即缺少 UTF-8 ↔ fs::path 的转换)。Windows 的窄字符文件 API 使用当前 OEM 代码页(俄语环境为 cp866),导致 UTF-8 字节被按 cp866 解释,磁盘上出现乱码文件名。工具本身返回的 JSON 仍显示原始 UTF-8 路径,所以“写入成功”的反馈与磁盘真实名称不一致。
环境排查
- 确认 llama-server 版本:Issue 中为 version 9851 (0eca4d490),建议对比是否使用包含 #29415 及之后提交的构建。
- 确认操作系统:Windows 10,以及当前控制台代码页(chcp),注意控制台代码页会影响你观察文件名的方式。
- 确认 GGML backend:CUDA。
- 确认触发工具:write_file、read_file 以及创建目录的内置工具(tools/server/server-tools.cpp)。
- 用 Python
os.listdir()而非 cmd.exedir检查真实文件名,并做逐字符码点比对,排除控制台编码干扰。
解决步骤
- 先按原复现路径触发一次:让模型用 write_file 在服务器工作目录写入非 ASCII 文件名,例如
файл_проверки.txt。 - 不要用 cmd.exe 的
dir判断,改用 Python 在工作目录执行os.listdir(),打印列表中每个名称的逐字符码点(如[hex(ord(c)) for c in name]),确认是否与传给工具的路径完全一致。 - 若码点不一致:属于 #29415 之前的旧行为。升级到包含 #29415(common: extract shared unicode path/string helpers,通过 std::filesystem::u8path 做显式 UTF-8 ↔ fs::path 转换)及 #29475 等后续提交的 llama.cpp 构建。这些是 Issue 评论中确认的实际修复来源。
- 若无法立即升级,可参考评论中 Qwen 提出的补丁 fix_utf8_filepaths.patch 及其配套 README_UTF8_FIX.md / INSTRUCTIONS.md,但需视为“可优先尝试”,因为原文只称其为 partial solution,未经官方验证。
- 升级后重复第 1、2 步,并用 read_file 以相同路径读回内容,验证写入 → listdir → 读取的往返是否稳定。
验证方法
在 Windows 10 的 cp866 控制台代码页下(保持原始复现条件),用 write_file 创建西里尔字母文件名,随后用 Python os.listdir() 获取真实文件名并逐字符比对码点,确认与传给工具的路径完全一致、无 cp866 乱码;再用 read_file 以同一路径读取,确认 UTF-8 内容完整返回,没有乱码或内容损坏。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


