文件名中包含日文字符的 cURL 文件上传不起作用

cURL File Upload with japanese characters in filename not working

我正在尝试使用以下命令将文件名中包含日文字符的文件上传到服务器。这在 mac 或邮递员中完全可以正常工作,但在 Windows 上却不行。 字母数字文件名有效。

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"

我收到以下错误消息

Warning: Couldn't read data from file
Warning: "/C:/Users/user1/AppData/Local/Temp/?.mp3", this makes an empty
Warning: POST.

有没有办法让它在 Windows 上也能正常工作?我尝试使用 --data-urlencode 而不是 --data-binary 得到相同的结果。

Windows' 命令提示符在 Unicode 方面是出了名的麻烦。解决方法:避免使用非 ASCII 文件名。通常您的文件名与另一个文件名一起存储:

  1. 启动命令提示符(cmd.exe)。

  2. 使用 Unicode 文件名列出您的文件:

    • 首先输入路径 (dir M:\folder\sub\here\),然后使用 Tab 键迭代文件名,直到出现您想要的文件名(它将是 displayed as ?.txt tho),或通过添加通配符(即 *.txt)来完成命令。然后 运行 这个命令 (hit Enter).
    • 如果您通过添加 /x 参数成功完成同样的操作:dir /x M:\folder\sub\here\*.txt,您应该会看到如下内容:
      2021-09-16  11:59    <DIR>                       .
      2021-09-16  11:59    <DIR>                       ..
      2021-08-30  14:11     8'589'934'592              pagefile.sys
      2021-09-16  11:58         4'120'885 D763~1.MP3   ?.mp3
      
      在输出中,您注意到 4'120'885 是文件大小,?.mp3 应该是 ぁ.mp3替代文件名D763~1.MP3,这就是ASCII,可以在任何地方使用。
  3. 相应地执行 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/D763~1.MP3"
    

再说一遍:这是命令提示符。如果您以其他方式启动 cURL(即 Win+R 或通过 CreateProcessW()) 你一开始就不会有问题。