You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中用gh api获取UTF-8 BOM文件出现损坏字符,如何解决?

解决PowerShell Core中gh api获取XML文件出现损坏字符的问题

问题背景

在Windows 11的PowerShell Core 7.2.6执行以下命令获取XML文件时:

gh api -H "Accept: application/vnd.github.raw+text" repos/zippy1981/CodeFirstBetter/contents/Zippysoft.CodeFirst.AD.Importer/Zippysoft_CodeFirst_AD_Importer.csproj | Out-File Zippysoft_CodeFirst_AD_Importer.csproj

得到的文件存在4个疑似损坏的BOM字符,导致dotnet无法解析;添加-Encoding utf8BOM参数后,会额外增加真实BOM,问题仍未解决。

解决方案

方法1:使用原生重定向绕开PowerShell管道编码处理

直接用CMD风格的重定向符>写入文件,PowerShell Core会直接保留gh api返回的原始字节,避免编码转换带来的问题:

gh api -H "Accept: application/vnd.github.raw+text" repos/zippy1981/CodeFirstBetter/contents/Zippysoft.CodeFirst.AD.Importer/Zippysoft_CodeFirst_AD_Importer.csproj > Zippysoft_CodeFirst_AD_Importer.csproj

方法2:通过字节流模式写入文件

如果需要使用管道,用Set-Content的-AsByteStream参数直接处理原始字节,跳过PowerShell的字符串编码步骤:

gh api -H "Accept: application/vnd.github.raw+text" repos/zippy1981/CodeFirstBetter/contents/Zippysoft.CodeFirst.AD.Importer/Zippysoft_CodeFirst_AD_Importer.csproj | Set-Content Zippysoft_CodeFirst_AD_Importer.csproj -AsByteStream

方法3:修复已生成的损坏文件

如果已经得到了带损坏字符的文件,可以直接截取掉开头的4个字符,再重新写入:

$content = Get-Content Zippysoft_CodeFirst_AD_Importer.csproj -Raw
$content.Substring(4) | Set-Content Zippysoft_CodeFirst_AD_Importer.csproj -Encoding utf8NoBOM

原命令失效原因

Out-File会将管道中的内容先转换为PowerShell字符串,再按指定编码写入文件。gh api返回的损坏字节经过字符串解析后变成了可见的异常字符,即使指定utf8BOM编码,也会在保留这些损坏字符的基础上额外添加BOM,导致文件无法被dotnet正常解析。

内容的提问来源于stack exchange,提问作者Justin Dearing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:35:26