我尝试用 java 编写一个存档程序,它创建 TAR 或 ZIP 存档,具有正确的西里尔文文件名,然后它在 linux 中打开。 在 Windows 中,我使用来自 ant 的 org.apache.tools.zip:
ZipOutputStream.setEncoding("cp866");
得到它,但是 linux 中的 file roller(归档管理器)不理解它。在 org.apache.tools.tar 方法 setEncoding() 中不存在。我还尝试使用其他一些支持西里尔字母的编码,例如 cp1251、utf-8、koi-8r,但没有给出任何结果。
最佳答案
您的文件可能正在正确创建文件,问题出在 file-roller 上。 众所周知,它无法检测文件名的编码。参见 here和 here .
尝试使用 unzip (文件名可能会出现乱码)或 p7zip直接从 shell(还有一个 java 版本 - j7zip)。
7zip 对我有用,它使用西里尔字符的 utf8 编码。 File roller、Ark 和所有其他实际上执行解压缩的程序都会破坏我系统中的文件名。
关于Java、文件、Linux 和西里尔文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240569/