
v26.0.0 – UnicodeEncodeError: ‘charmap’ codec can’t encode characters in position 19-22: character maps to <undefined>
快速结论:此报错通常发生在 Windows 环境下使用 Kohya SS 训练 Flux LoRA 时,因系统终端(console)默认编码(如 cp1252)无法输出中文字符(如“学習開始”)导致。优先排查 console 编码是否为 UTF-8,或尝试将系统 locale 设为 UTF-8。
问题场景
用户在 Kohya SS v26.0.0 上运行 flux_train_network.py 训练 Flux LoRA 时触发。训练初始化完成后,在 accelerator.print("running training / \u5b66\u7fd2\u958b\u59cb")(即输出“running training / 学習開始”)处崩溃。此前在较低版本中未出现此问题。
报错原文
UnicodeEncodeError: 'charmap' codec can't encode characters in position 19-22: character maps to <undefined>
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:\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>
原因分析
可能原因:训练脚本在 train_network.py 第 1394 行通过 accelerator.print() 输出包含中文的字符串“running training / 学習開始”。在 Windows 系统下,终端(cmd/PowerShell)默认编码为 cp1252(或类似单字节编码),该编码表缺少对中文字符的映射,导致 UnicodeEncodeError。此问题在升级到 v26.0.0 后出现,可能与该版本新增或改进了中文输出有关。
环境排查
- 操作系统:Windows(报错中出现
cp1252.py,表明系统 locale 为 Western European Latin-1,非 UTF-8)。 - Python 版本:Python 3.10(根据路径
Python310)。 - Kohya SS 版本:v26.0.0(从 Issue 标题确认)。
- 终端编码:运行
chcp命令确认当前 active code page(例如 1252 可能代表 cp1252)。
解决步骤
- 设置环境变量
PYTHONIOENCODING=utf-8:在启动 Kohya SS 前,于命令行中执行set PYTHONIOENCODING=utf-8(或通过系统环境变量永久设置此值)。这能强制 Python 的 stdout/stderr 使用 UTF-8 编码。 - 切换终端编码为 UTF-8(可优先尝试):在运行训练脚本的终端中,先执行
chcp 65001,再启动训练。这会临时将活动代码页设为 UTF-8。 - 修改训练脚本:作为临时方案,编辑
train_network.py第 1394 行的输出内容,移除或替换中文字符(例如改为英文 “running training / start”),以避免编码问题。注意:此改动可能因更新而被覆盖。 - 使用支持 UTF-8 的终端:尝试在 Windows Terminal 或 VS Code 集成终端中运行,确保终端默认编码为 UTF-8。
验证方法
应用上述任一方案后,重新运行训练命令。如果控制台不再报 UnicodeEncodeError 且训练正常推进,即可确认问题已解决。



