Linux 和 Windows 之间的 Unicode(非 ASCII)文件名互操作性

Linux 和 Windows 之间的 Unicode(非 ASCII)文件名互操作性

我遇到了这个问题,但我真的不确定问题出在客户端还是服务器上,或者两者兼而有之。如果您能帮助我诊断和解决这个问题,我将不胜感激。

我有一台运行 Debian 的远程 Linux 机器,我经常从它那里下载文件和文件夹到 Windows 8 机器。大多数时候它都能正常工作。我使用一个允许多线程下载的下载管理器来加快下载速度。

然而,在少数情况下,Linux 上的文件名中包含非 ASCII 字符。我的下载管理器(GetRight,相当古老的一个)下载时出错了。我认为这是 GetRight 的问题,因为当我在 Putty 中 ssh 到服务器时,在 WinSCP 中文件名看起来是正确的,WinSCP 可以完美地下载它们(尽管,可惜不是以多线程方式)。

但是然后我尝试在 Windows 下使用 ftp.exe 连接到服务器,文件名也出现了混乱。

现在我决定,我只是将服务器上的文件 tar-gzip 并以此方式下载。但这也不起作用。例如在 Linux 上我有:

[jade ~/tmp] ls
тестовый
[jade ~/tmp] tar -czf ../data.tar.gz .
[jade ~/tmp]

现在我在 Windows 上下载 data.tar.gz 并尝试解压它:

E:\!2>7z x data.tar.gz

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Processing archive: data.tar.gz

Extracting  data.tar

Everything is Ok

Size:       10240
Compressed: 168

E:\!2>7z l data.tar

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Listing archive: data.tar

--
Path = data.tar
Type = tar
Physical Size = 10240
Headers Size = 9728

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2013-01-21 17:00:10 D....            0            0  .
2013-01-21 17:00:10 .....            2          512  .\╤В╨╡╤Б╤В╨╛╨▓╤Л╨╣
------------------- ----- ------------ ------------  ------------------------
                                     2          512  1 files, 1 folders

正如您所看到的,即使从等式中排除传输代理(例如 ftp 客户端/服务器),问题仍然存在。

我想集中精力研究最后一种情况,在服务器上进行 tar-gziping,在客户端进行解压,并使其正常工作。

有人能解释一下我为什么会看到这样的情况吗?是服务器的问题还是客户端的问题,还是两者都有?如何解决?

我想说的是,如果我自己创建文件,那么在窗口上我可以拥有一个具有所需文件名的文件:

E:\!2>echo a > тестовый


E:\!2>dir т*
 Volume in drive E is Storage
 Volume Serial Number is F41B-FF77

 Directory of E:\!2

21-Jan-13  17:20                 4 тестовый
               1 File(s)              4 bytes
               0 Dir(s)  63,511,015,424 bytes free

E:\!2>

答案1

这个答案来解释一下发生了什么。

我建议您使用 7zip 而不是 tar,因为 7zip 似乎可以“记住”文件名使用的编码,并能很好地解压它们。我已经在瑞典非 ASCII 字符上测试过它,希望它也能为您服务。

相关内容