如何在PowerShell脚本中正确处理API返回的Unicode字符
PowerShell调用API多语言返回值乱码解决方案
问题原因
你遇到的乱码是典型的编码解析错误:API返回的是UTF-8编码的多语言字符,PowerShell默认使用Windows系统编码(通常为GB2312、ISO-8859-1等)解析内容,导致俄语、法语等非ASCII字符显示异常。
解决方案
方案1:请求时直接指定编码(适用于所有PowerShell版本)
调用Invoke-RestMethod、Invoke-WebRequest等请求命令时,显式指定UTF-8编码解析返回内容:
- PowerShell 7+ 直接添加请求参数即可:
$response = Invoke-RestMethod -Uri "你的API接口地址" -Method Get -ContentType "application/json; charset=utf-8"
- Windows PowerShell 5.1 需手动解析返回的原始字节:
$response = Invoke-WebRequest -Uri "你的API接口地址" -UseBasicParsing # 用UTF-8解码原始字节得到正确内容 $correctContent = [System.Text.Encoding]::UTF8.GetString($response.Content)
也可以用WebClient对象简化操作:
$webClient = New-Object System.Net.WebClient $webClient.Encoding = [System.Text.Encoding]::UTF8 $correctContent = $webClient.DownloadString("你的API接口地址")
方案2:全局配置PowerShell默认编码(一劳永逸解决所有编码问题)
打开PowerShell配置文件(路径可通过$PROFILE命令获取),在文件末尾添加以下配置:
# 设置所有输入输出默认使用UTF-8编码 $OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
保存后重启PowerShell即可生效,后续所有请求和输出都会默认使用UTF-8编码解析内容。
特殊场景适配
如果API返回内容使用的是非UTF-8的特定编码(如俄语站点常用的KOI8-R、法语站点常用的ISO-8859-1),将上述代码中的[System.Text.Encoding]::UTF8替换为对应编码即可,示例:
# 适配KOI8-R编码的俄语接口 $correctContent = [System.Text.Encoding]::GetEncoding("KOI8-R").GetString($response.Content)
内容的提问来源于stack exchange,提问作者Anthony Hunter
相关产品推荐
相关产品推荐

