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

如何在PowerShell脚本中正确使用非ASCII字符?

解决PowerShell处理非ASCII字符及JSON发送乱码问题

在英文Windows Server环境下,PowerShell处理含非ASCII字符的参数并转JSON时出现乱码,核心原因是脚本编码读取错误、控制台输出编码不匹配和API请求编码未明确指定,对应解决方法如下:

1. 确保脚本以UTF-8带BOM格式保存

英文环境下PowerShell默认以ASCII编码读取脚本,若脚本含非ASCII字符且保存为UTF-8无BOM,会直接导致字符解析错误。将脚本文件保存为UTF-8 with BOM格式,可让PowerShell正确识别非ASCII字符。

2. 调整控制台输出编码

默认控制台采用OEM编码(如CP437),不支持UTF-8字符显示,需手动设置输出编码为UTF-8:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

将该代码添加到脚本开头,Write-Host即可正确显示非ASCII字符。

3. 调用API时指定UTF-8编码

ConvertTo-Json生成的JSON字符串本身为UTF-16格式,但发送到API时需明确指定UTF-8编码,避免自动转换导致乱码。以Invoke-RestMethod为例:

Invoke-RestMethod -Uri "你的API地址" -Method Post -Body $JsonBody -ContentType "application/json; charset=utf-8"

修改后的完整脚本示例

# 设置控制台输出编码为UTF-8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

function Add-TestUser ([String] $name) {
   $body = @{name = $name}
   $JsonBody = $body | ConvertTo-Json
   write-host $name
   write-host $JsonBody
   # 调用API时指定UTF-8编码
   Invoke-RestMethod -Uri "https://your-api-endpoint" -Method Post -Body $JsonBody -ContentType "application/json; charset=utf-8"
}

$name = "Caissière"
write-host $name

Add-TestUser -name $name

执行后,控制台会正确显示Caissière,且发送到API的JSON也会保留正确的非ASCII字符。

内容的提问来源于stack exchange,提问作者Gerrit Verhaar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:40:56