在 Windows 下创建的 7zip 文件中,将带变音符号的文件解压到 Linux 中

在 Windows 下创建的 7zip 文件中,将带变音符号的文件解压到 Linux 中

我想将使用 Windows 下的 7zip 压缩的硬盘大备份提取到我的 Debian Wheezy 安装中。我使用以下命令行:

7z x -pmypasswordhere file.7z

如果现在有一个名为的文件或文件夹阿普菲尔(德语中的苹果)Linux 硬盘上的结果是阿普费尔

我该如何解决这个问题?我尝试使用以下命令,但提示命令行无效:

7z x -scsWIN -pmypasswordhere file.7z

...其中-scs开关的解释为:“-scs{UTF-8 | WIN | DOS}:为列表文件设置字符集”。

我在 Windows 8 上使用 7z 9.30 64bit 压缩了 NTFS 分区上的文件。压缩强度选项为极端主义者。我使用 AES-265 加密了文件名及其内容。我的 Debian Wheezy 安装是德语的,因此回显 $LANG是“de_DE.UTF-8”。

答案1

要将“äpfel”变为“äpfel”,需要获取 äpfel{UTF-8},然后使用 ISO-8859-15 将其转换为 UTF8。然后您将获得 äpfel{UTF-8}。

那么这是怎么发生的?(您的工作流程中似乎没有 ISO-8859-1[5] (Latin1))。

我相信我可以使用该选项在 VFAT 或 NTFS 分区上重现此问题mount iocharset=value。如果我将其设置为 ISO-8859-15 并将语言环境设置为 UTF-8,那么或许系统可能会被欺骗而将文件名转换到“错误的方向”。

但是在这里,您的 Wheezy 安装最有可能ext3,并且我不知道 ext3 是否有 NLS 选项。

另一种可能性是,这些文件实际上是正确创建,而你只是看到他们错了:

  • Putty 是否设置为使用 UTF8?
  • 您的 FTP 服务器 (和客户端) 是否设置为 UTF8?

我注意到另一件奇怪的事情:你的两个苹果文件,一个在 16:10,另一个在 16:34,似乎使用两种不同的日期格式显示ls。在一个例子中,指定了年份。

这可能是因为 7z 正在创建一个稍微不寻常的 inode 条目?

然而,这里是一个使用实用程序的技巧convmv,可能会有帮助。

答案2

-scs选项仅适用于@列表文件这似乎是一个包含文件名列表的文件。它不会影响文件名的字符集。

一个可能的解决方案是iconv针对所有文件使用适当的选项运行你将它们提取出来了。

答案3

这个问题与拉链有关固定的在最近的far2l 文件和档案管理器. 为了让 far2l 的 zip 旧式字符集检测正常工作,您的系统语言设置应与创建存档的系统上的设置相匹配(Windows 的内部“zip 文件夹”工具使用相同的逻辑),因此如果您的安装是德语,并且 zip 文件是在具有德语语言设置的 PC 上创建的,则一切都应该开箱即用。

答案4

提取文件后,只需通过 mv 或文件浏览器重命名它,就不会造成任何损害。

对于重命名大量文件,如果被迫这样做,您可以使用 find(带有 -exec)或 krename。

相关内容