Skip to content

fix: 本地模型翻译时 JsonSerializer 对非 ASCII 字符的 \uXXXX 转义导致翻译失败#4

Open
aa754105233 wants to merge 1 commit into
HanFengRuYue:mainfrom
aa754105233:main
Open

fix: 本地模型翻译时 JsonSerializer 对非 ASCII 字符的 \uXXXX 转义导致翻译失败#4
aa754105233 wants to merge 1 commit into
HanFengRuYue:mainfrom
aa754105233:main

Conversation

@aa754105233

@aa754105233 aa754105233 commented Jun 14, 2026

Copy link
Copy Markdown

hey,大佬你好,我用这个工具时出现了些问题,我拷了源代码过来解析修复了,麻烦你有空查看。

原因

用本地模型翻译时(Sakura),出现了无论什么情况,翻译只返回原文的bug。

根因

System.Text.Json.JsonSerializer.Serialize() 默认会将所有非 ASCII 字符(如日文假名、汉字)
转义为 \uXXXX 格式。例如 "こんにちは" 被序列化为 "\u3053\u3093\u306B\u3061\u306F"。

这些转义序列作为用户消息发送给 LLM 后:

  • 云端大模型(DeepSeek 等):能识别 Unicode 转义 → 正常翻译
  • 本地小模型(Galtransl、Sakura 等):不认识 → 原样输出 → 最终被解析回日文原文

表现为:游戏内文本始终显示日文原文不翻译,并且存入了"原文=译文"的错误缓存,
形成死循环。

修复

4 处 JsonSerializer.Serialize() 调用增加 UnsafeRelaxedJsonEscaping 编码器,
使日文等非 ASCII 字符以原始字形发送给 LLM:

  • CallOpenAiCompatAsync (云端点 + Custom/本地模型)
  • CallClaudeAsync (Claude 端点)
  • CallGeminiAsync (Gemini 端点)
  • TranslateLocalSequentialAsync (本地模式顺序翻译)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants