fix(dev): dev.ps1 Start-Job 子进程强制 UTF-8, 修后端中文日志乱码

Start-Job 开的是全新 powershell.exe 子进程, 不继承主进程第 25-28 行
设的 UTF-8, 默认用系统 ANSI (中文 Windows = GBK/cp936) 解码后端的
UTF-8 输出 → 中文变 '瀹氫箟缂哄皯' 式乱码 (UTF-8 被当 GBK 解)。

第 25 行注释 'so child process logs aren't garbled' 的意图因 Start-Job
开新进程而落空。在 backend/frontend 两个 scriptBlock 开头各设 UTF-8,
与 app/__init__.py 的 stdout/stderr 编码对齐。

PowerShell 语法校验通过。
This commit is contained in:
shy3130
2026-07-13 20:51:23 +08:00
parent a0fec8a754
commit 40c197149e
+8
View File
@@ -171,6 +171,11 @@ $frontendPidFile = [System.IO.Path]::GetTempFileName()
$backendJob = Start-Job -Name 'backend' -ScriptBlock { $backendJob = Start-Job -Name 'backend' -ScriptBlock {
param($pidFile, $dir, $port) param($pidFile, $dir, $port)
# Start-Job 开的是全新 powershell.exe 子进程, 不继承主进程的 UTF-8 设置,
# 默认用系统 ANSI (中文 Windows = GBK/cp936) 解码后端 UTF-8 输出 → 中文乱码。
# 这里强制子进程用 UTF-8, 与 app/__init__.py 的 stdout/stderr 编码对齐。
[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding $false
$OutputEncoding = New-Object System.Text.UTF8Encoding $false
$PID | Out-File -FilePath $pidFile -Encoding ascii -Force $PID | Out-File -FilePath $pidFile -Encoding ascii -Force
$env:PYTHONUNBUFFERED = '1' $env:PYTHONUNBUFFERED = '1'
Set-Location $dir Set-Location $dir
@@ -179,6 +184,9 @@ $backendJob = Start-Job -Name 'backend' -ScriptBlock {
$frontendJob = Start-Job -Name 'frontend' -ScriptBlock { $frontendJob = Start-Job -Name 'frontend' -ScriptBlock {
param($pidFile, $dir, $port) param($pidFile, $dir, $port)
# 同上: job 子进程默认 GBK, pnpm/前端工具链也是 UTF-8 输出, 需对齐。
[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding $false
$OutputEncoding = New-Object System.Text.UTF8Encoding $false
$PID | Out-File -FilePath $pidFile -Encoding ascii -Force $PID | Out-File -FilePath $pidFile -Encoding ascii -Force
Set-Location $dir Set-Location $dir
& pnpm dev --host 0.0.0.0 --port $port 2>&1 & pnpm dev --host 0.0.0.0 --port $port 2>&1