修复 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:
parent
a4d1218d21
commit
6b2c87dc18
@ -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));
|
||||
}
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user