修复 Windows 编码问题导致生成失败

Windows 默认编码为 GBK,Python stdout 输出含中文的 JSON 时
Node.js 端无法正确解析,导致批量生成操作静默失败。

- python/main.py:启动时强制 stdin/stdout 使用 UTF-8
- templateIpc.js:spawn 传入 PYTHONUTF8=1,改用 Buffer 拼接后 UTF-8 解码

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
MikiVL 2026-05-07 11:41:55 +08:00
parent a4d1218d21
commit 6b2c87dc18
2 changed files with 14 additions and 6 deletions

View File

@ -18,16 +18,19 @@ const PYTHON_BIN = app.isPackaged
function callPython(payload) {
return new Promise((resolve, reject) => {
const isPackaged = app.isPackaged;
// PYTHONUTF8=1 确保 Windows 上 Python 使用 UTF-8 编码
const spawnEnv = { ...process.env, PYTHONUTF8: "1" };
const proc = isPackaged
? spawn(PYTHON_BIN)
: spawn(process.env.PYTHON_PATH || "python3", [PYTHON_BIN]);
? spawn(PYTHON_BIN, [], { env: spawnEnv })
: spawn(process.env.PYTHON_PATH || "python3", [PYTHON_BIN], { env: spawnEnv });
let stdout = "";
proc.stdout.on("data", (d) => (stdout += d));
proc.stderr.on("data", (d) => console.error("[python]", d.toString()));
const chunks = [];
proc.stdout.on("data", (d) => chunks.push(d));
proc.stderr.on("data", (d) => console.error("[python]", d.toString("utf8")));
proc.on("close", () => {
const stdout = Buffer.concat(chunks).toString("utf8").trim();
try {
resolve(JSON.parse(stdout.trim()));
resolve(JSON.parse(stdout));
} catch (e) {
reject(new Error("Python 返回了无效 JSON: " + stdout));
}

View File

@ -1,5 +1,10 @@
import sys
import json
import io
# Windows 默认编码不是 UTF-8强制设置
sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding="utf-8")
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", line_buffering=True)
def main():
for line in sys.stdin: