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

PowerShell中Invoke-RestMethod发送含特殊字符文件名的乱码问题

解决PowerShell发送含特殊字符文件名的乱码问题

你的问题是文件名中的特殊字符(äöü)在HTTP传输后出现乱码,本质是编码不匹配:PowerShell默认用系统编码传递文件名,而服务端期望UTF-8编码,导致äöü被错误解析为äöü。

修复步骤

1. 修正代码语法错误

原代码中$fileName=testäöü.csv缺少引号,会触发语法错误,先补上:

$fileName="testäöü.csv"

2. 手动指定UTF-8编码传递文件名

通过构造符合RFC 5987标准的Content-Disposition HTTP头,明确告诉服务端文件名使用UTF-8编码。修改后的完整代码:

$exportPath="C:\test\"
$fileName="testäöü.csv"

$originalFilePath = Join-Path -Path $exportPath -ChildPath $fileName
$zipFileName = [System.IO.Path]::ChangeExtension($fileName, ".zip")
$zipFilePath = Join-Path -Path $exportPath -ChildPath $zipFileName

Compress-Archive -Path $originalFilePath -DestinationPath $zipFilePath -Update

# 生成UTF-8编码的文件名HTTP头
$encodedFileName = [System.Web.HttpUtility]::UrlEncode($zipFileName, [System.Text.Encoding]::UTF8)
$headers = @{
    "Content-Disposition" = "attachment; filename*=UTF-8''$encodedFileName"
}

Invoke-RestMethod -Credential $Credential -Uri $RestRequest -Method PUT -InFile $zipFilePath -ContentType "application/zip" -Headers $headers

关键解释

  • filename*=UTF-8''是标准格式,明确声明文件名的编码为UTF-8
  • UrlEncode将特殊字符转换为UTF-8的URL编码格式,确保传输过程中不会出现编码丢失
  • 服务端只要遵循HTTP标准,就能正确解码还原出原始文件名

额外验证

如果修改后仍有问题,需要确认服务端是否支持RFC 5987的filename*语法,大部分现代Web框架(如Spring、ASP.NET)都默认支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:43:19