快速结论:该报错通常出现在 Windows 平台使用 Kohya SS(sd-scripts)训练 FLUX LoRA 时,程序通过 accelerator.print 输出包含日文“学習開始”的日志,而当前控制台编码为 cp1252 无法编码这些非 ASCII 字符,导致训练在启动阶段即以 UnicodeEncodeError: 'charmap' codec can't encode characters in position 19-22: character maps to <undefined> 中断。优先排查运行环境的字符编码设置,而非模型或显存问题。
适用环境:Windows;Kohya SS v26.0.0(sd-scripts);Python 3.10(位于 Python310 路径,venv 位于 C:\SD\kohya_ss\venv);使用 accelerate launch 调用 flux_train_network.py 训练 FLUX LoRA,启用了 bf16、fp8(U-Net 与 Text Encoder)与 gradient checkpointing。
最快修复方案:暂无确认的一步修复方案。Issue 讨论链中未记录经原发帖者验证的最终处理命令,仅能确认故障点在日志输出的字符编码环节。
注意事项:Issue 中未给出官方确认的修复版本或补丁,任何修改均需自行验证;改动控制台编码或源码日志字符串属于 workaround,可能影响其他依赖同一运行环境的脚本;由于问题出在日志打印阶段,强制跳过也可能掩盖后续真正错误,建议修改后完整观察一次训练启动流程。
问题场景
用户在 Windows 上通过 Kohya SS 的 accelerate launch 启动 sd-scripts/flux_train_network.py,训练 FLUX LoRA。从日志看,模型与网络模块已正常加载(import network module: networks.lora_flux,fp8 配置完成,optimizer 与 data loader 准备完毕),随后训练器进入 trainer.train(args),在打印“running training / 学習開始”这一进度提示时崩溃,进程以 exit code 1 退出。
报错原文
Traceback (most recent call last):
File "C:\SD\kohya_ss\sd-scripts\flux_train_network.py", line 555, in <module>
trainer.train(args)
File "C:\SD\kohya_ss\sd-scripts\train_network.py", line 1394, in train
accelerator.print("running training / \u5b66\u7fd2\u958b\u59cb")
File "C:\SD\kohya_ss\venv\lib\site-packages\accelerate\accelerator.py", line 1273, in print
self.state.print(*args, **kwargs)
File "C:\SD\kohya_ss\venv\lib\site-packages\accelerate\state.py", line 1189, in print
PartialState().print(*args, **kwargs)
File "C:\SD\kohya_ss\venv\lib\site-packages\accelerate\state.py", line 706, in print
print(*args, **kwargs)
File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 19-22: character maps to <undefined>
...
subprocess.CalledProcessError: Command '['C:\\SD\\kohya_ss\\venv\\Scripts\\python.exe', 'C:/SD/kohya_ss/sd-scripts/flux_train_network.py', '--config_file', 'F:/SD/workspace/output/Lora/XLAPZ10/APZ-FLX-01\\config_lora-20260718-120118.toml']' returned non-zero exit status 1.
原因分析
最可能的原因是控制台输出流的默认编码与日志内容不匹配。报错文件为 Python 标准库的 encodings/cp1252.py,说明当前 Windows 环境的标准输出被判定为 cp1252(西欧代码页)。而 train_network.py 在进入训练主循环前调用 accelerator.print("running training / \u5b66\u7fd2\u958b\u59cb"),其中 \u5b66\u7fd2\u958b\u59cb 是日文“学習開始”,无法用 cp1252 编码,于是抛出 UnicodeEncodeError,整个训练进程被中止。
之所以在升级到 v26.0.0 后出现,可能是因为该版本引入了这条包含非 ASCII 字符的日志语句,或改变了日志输出路径(例如经由 accelerate 的 print),触发了此前未暴露的编码问题。具体引入点 Issue 中没有定论,属于可能原因。
环境排查
- 确认运行操作系统为 Windows,且系统区域/非 Unicode 程序语言可能影响默认代码页(cp1252)。
- 确认 Python 为 3.10,venv 路径为
C:\SD\kohya_ss\venv。 - 确认 Kohya SS / sd-scripts 版本为 v26.0.0,且问题在升级后出现、升级前可正常工作。
- 确认训练入口为
accelerate launch调用flux_train_network.py,并使用 config TOML。 - 确认训练启用了 full bf16、U-Net fp8、Text Encoder fp8 与 gradient checkpointing。
- 确认
stdout的实际编码(可通过 Python 中sys.stdout.encoding查看,属排查思路,非 Issue 中已验证命令)。
解决步骤
- 先定位崩溃点是日志打印而非训练本身:确认 traceback 中最终异常发生在
accelerate/state.py的print调用,且编码失效发生在cp1252.py。 - 检查当前终端/虚拟环境的字符编码是否为 UTF-8(例如通过 Python 交互环境查看
sys.stdout.encoding)。 - 针对 Windows 控制台,可优先尝试将代码页切换为 UTF-8(如
chcp 65001)或设置环境变量PYTHONIOENCODING=utf-8后重新启动训练,观察报错是否消失。该思路源自报错文件指向 cp1252,但 Issue 中未记录原发帖者的验证结果,属于可优先尝试的 workaround。 - 若编码调整无效,可进一步观察是否存在其他环境(如 IDE、父进程)覆盖了标准输出编码。
- 由于升级 v26.0.0 后才触发,若问题持续,可考虑回退到上一可用版本以继续训练,作为临时规避方案(Issue 提到升级前可正常工作)。
验证方法
重新启动训练后,若日志能正常打印“running training / 学習開始”并继续进入训练循环(开始出现 step/loss 等信息),则说明编码问题已解决;若仍在同一行抛出 UnicodeEncodeError,则说明当前环境的输出编码仍不是 UTF-8 兼容编码,需继续排查父进程或 IDE 的编码设置。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


