PowerShell HTTP 验证中文乱码(mojibake)坑
Invoke-WebRequest 抓取页面 Content 时中文变乱码(UTF-8 字节被按 Latin-1/系统码页解码),导致 -match '中文' 全部 False;产物实际有效,需改读 dist 文件 UTF-8 取证或用浏览器 DOM 验证。
- 验证
- PowerShell
- 编码
- Astro
现象
PBC 详情页 curl 验证时,Invoke-WebRequest "http://127.0.0.1:4399/projects/wuren-live-desk" 返回 200,但 .Content -match '视频号半无人直播台' 结果 False;打印内容看到 善:start.bat 这类乱码(本应是”善:start.bat”)。
根因
PowerShell 5.1 的 Invoke-WebRequest 对响应 Content 默认按错误编码解码(UTF-8 字节被按 Latin-1 / 系统 ANSI 码页解读),服务端未返回 charset 或客户端忽略时中文全变 mojibake。乱码发生在客户端解码层,不是产物错误——dist 文件本身是 UTF-8 明文。
修复
- 产物取证改走文件层:
Get-Content dist\projects\wuren-live-desk\index.html -Raw -Encoding UTF8 | Select-String '半无人'→ True,证明内容存在 - HTTP 层只认 200 状态码(详情页/列表页/配图均 200)
- 最终视觉验收用浏览器(bu)打开页面截图 + DOM 文本(
bu.get_page_text()/document.querySelectorAll('h3')),绕开解码问题
注意
- 验证中文内容时优先用文件读取(显式 -Encoding UTF8)或浏览器 DOM,不要依赖 Invoke-WebRequest 的 Content 匹配中文
- PowerShell 5.1 下 gzip 响应也需显式解压,否则拿到的可能是压缩字节