Windows 上的 tar 不处理带有特殊字符的路径

Windows 上的 tar 不处理带有特殊字符的路径

在 Windows 10 命令行中,tar在存档本身的路径中创建带有“特殊”字符(例如扩展拉丁字符)的存档会导致错误。

更准确地说,快速示例表明,Unicode 代码点 255 以上的字符似乎失败了。也就是说拉丁语扩展-A以上。

注意:这是关于 tar 档案本身的路径档案库中文件(又名成员)都有“简单”的 ASCII 路径。

注意:开箱即用的 Windows 10包括 bsdtar库存档, 位于c:\Windows\System32\tar.exe

例如,tar -c -f Ā.tar foo创建一个名为A.tar,而不是 的档案Ā.tar

类似地,如果我有一个名为的现有档案Ā.tar,则会tar -t -f Ā.tar产生

tar:打开存档时出错:无法打开“A.tar”

并且类似的事情tar -c -f Δ.tar foo完全失败了

tar:无法打开“?.tar”

问题:可能是什么原因造成的?有没有什么解决办法或解决方法?

一些观察:

  • 该问题已重现于命令电源外壳,以及(git-)狂欢c:\Windows\System32\tar.exe(在 bash 中明确调用)
  • 问题确实不是使用 GNU tar 出现,与 git-for-windows 捆绑在一起(也在 cmd、powershell 和 bash 中测试过)
  • 问题确实不是在 Ubuntu Linux 上出现(bsdtar安装后调用libarchive-tools
  • 如果tar 成员即使使用 PAX 格式,路径中也有代码点 255 以上的字符(这似乎也扩展到 GNU tar)
  • 默认代码页是437,但改变代码页,例如chcp 65001,没有什么区别
  • 此外,代码页 437 中的字符似乎也并不全都有效
  • 其他程序使用相同的“特殊”字符也可以正常工作,例如notepad Δ.txt

我个人始终坚持使用 ASCII 路径,但如果人们在 Windows 用户名中使用特殊字符,则此问题就会变得重要。这些字符最终会变成%USERPROFILE%

可能相关:

答案1

该问题在错误报告中被提及 路径中含有 Unicode 字符?#6

该漏洞报告本身可追溯到 2015 年,但 Bodigrim 直到 2023 年 12 月 22 日才宣布:

Unicode 文件名现在应该可以使用了,之后aa683b0。我将 TarPath 切换为 PosixString;由于它没有暴露,所以这不是一个重大变化。

Windows 的tar.exe发布日期为 2023 年 11 月,因此尚无法包含此修复程序,而且尚不清楚它何时会进入 Windows。

我建议近期避免使用 Windows 版本,或者避免使用包含非 ASCII 字符的路径。

相关内容