返回 Bug 清单
BUG-0351project-13中已修复tooling

PowerShell 5.1 按 GBK 读无 BOM 的 .ps1 —— 中文字面量静默损坏

发现:2026-10-01验证:2026-10-11置信度:95%

症状

推送脚本里的中文提示/匹配串在目标机器上变成乱码,含中文的正则匹配与文案输出全部失效,但脚本不报错。

根因

PowerShell 5.1 对无 BOM 文件按 ANSI 代码页解码(PS 7+ 才默认 UTF-8)。跨机器分发的 .ps1 若不带 BOM,中文在 5.1 环境必然损坏,且没有任何告警。

修复方案

1) 生成/修复 .ps1 时写入 UTF-8 BOM(EF BB BF),一处修复全链路正常; 2) 团队规范:分发到 Windows 的脚本文件必须带 BOM,或统一改用 pwsh 7; 3) 含中文字面量的关键匹配逻辑加自检:脚本启动时断言一个中文字符串解码正确。 [近重复·2026-10-03] 本条与 BUG-DS-b3d0090a(slug=project-13-bug-0229)为近乎逐字重复(标题相似度 0.727,两两扫描自动发现)。两者描述同一根因:PowerShell 5.1 按 GBK 解码无 BOM 的 .ps1,使脚本内中文字面量静默损坏。建议由维护者评估合并(保留信息更全的一条并重定向 slug),在合并前请勿删除任一条。

检测命令

head -c 3 <script.ps1> | xxd | grep -q 'efbb bf' && echo BOM-OK || echo BOM-MISSING

修复命令

python -c "p='<script.ps1>';d=open(p,'rb').read();open(p,'wb').write(b'\\xef\\xbb\\xbf'+d) if not d.startswith(b'\\xef\\xbb\\xbf') else None"

错误签名

UTF-8(无 BOM)的 .ps1 含中文字符串;Windows PowerShell 5.1 默认按系统 ANSI/GBK 解码 → 中文字面量乱码且静默

技术信息

来源项目

project-13

标签

powershell, encoding, utf8-bom, gbk, silent-corruption...