cURL上传文件名含日文字符的文件在Windows系统失效如何解决
问题原因
Windows 系统默认的 CMD、PowerShell 终端字符编码为 GBK(对应地区的非 UTF-8 编码),路径中的日文字符在传递给 curl 时会被转换为无法识别的?字符,导致 curl 无法匹配到真实存在的文件,触发读取失败报错。
可落地的解决方案
你可以选择任意一种方式解决:
- 临时修改终端编码后执行 curl 命令
- 如果你使用 CMD 终端,先执行编码切换命令:
chcp 65001
再执行你的 curl 命令即可,建议去掉路径前多余的斜杠,修改后命令如下:curl -X PUT "https://api.example.com/media/test/test.mp3" -H "Content-Type: audio/mpeg" --data-binary "@C:/Users/user1/AppData/Local/Temp/ぁ.mp3" - 如果你使用 PowerShell 终端,先执行编码配置命令:
再执行上述修改后的 curl 命令即可。$OutputEncoding = [Console]::InputEncoding = [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding
- 如果你使用 CMD 终端,先执行编码切换命令:
- 使用 PowerShell 原生上传命令规避编码问题
直接用 PowerShell 自带的Invoke-RestMethod上传,不会出现字符编码识别异常:$filePath = "C:\Users\user1\AppData\Local\Temp\ぁ.mp3" $header = @{"Content-Type" = "audio/mpeg"} Invoke-RestMethod -Uri "https://api.example.com/media/test/test.mp3" -Method Put -InFile $filePath -Headers $header - 永久修改系统编码为 UTF-8
打开「控制面板」→「区域」→「管理」选项卡 → 点击「更改系统区域设置」→ 勾选「Beta 版:使用 Unicode UTF-8 提供全球语言支持」,重启电脑后终端默认就会使用 UTF-8 编码,无需每次手动修改即可直接执行带非英文字符路径的 curl 命令。
内容的提问来源于stack exchange,提问作者easysaesch
相关产品推荐
相关产品推荐

