v26.0.0 – UnicodeEncodeError: ‘charmap’ codec can’t encode characters in position 19-22: character maps to

用户在 Kohya SS v26.0.0 上运行 flux_train_network.py 训练 Flux LoRA 时触发。训练初始化完成后,在 accelerator.print("running training / \u5b66\u7fd2\u958b\u59cb") (即输出“runni

v26.0.0 - UnicodeEncodeError: 'charmap' codec can't encode characters in position 19-22: character maps to

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)。

解决步骤

  1. 设置环境变量 PYTHONIOENCODING=utf-8:在启动 Kohya SS 前,于命令行中执行 set PYTHONIOENCODING=utf-8(或通过系统环境变量永久设置此值)。这能强制 Python 的 stdout/stderr 使用 UTF-8 编码。
  2. 切换终端编码为 UTF-8(可优先尝试):在运行训练脚本的终端中,先执行 chcp 65001,再启动训练。这会临时将活动代码页设为 UTF-8。
  3. 修改训练脚本:作为临时方案,编辑 train_network.py 第 1394 行的输出内容,移除或替换中文字符(例如改为英文 “running training / start”),以避免编码问题。注意:此改动可能因更新而被覆盖。
  4. 使用支持 UTF-8 的终端:尝试在 Windows Terminal 或 VS Code 集成终端中运行,确保终端默认编码为 UTF-8。

验证方法

应用上述任一方案后,重新运行训练命令。如果控制台不再报 UnicodeEncodeError 且训练正常推进,即可确认问题已解决。

参考来源

bmaltais/kohya_ss #3587

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14057

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注