在 Java 中添加非 ASCII 文件名以压缩
使用Java将非ASCII文件名添加到zip文件中的最佳方法是什么,以便可以在Windows和Linux中正确读取文件?
这是一个尝试,改编自 https://truezip.dev.java.net/tutorial-6.html#Example,它在Windows Vista中工作,但在Ubuntu Hardy中失败。在 Hardy 中,文件名在 file-roller 中显示为 abc-ЖДФ.txt。
import java.io.IOException;
import java.io.PrintStream;
import de.schlichtherle.io.File;
import de.schlichtherle.io.FileOutputStream;
public class Main {
public static void main(final String[] args) throws IOException {
try {
PrintStream ps = new PrintStream(new FileOutputStream(
"outer.zip/abc-åäö.txt"));
try {
ps.println("The characters åäö works here though.");
} finally {
ps.close();
}
} finally {
File.umount();
}
}
}
与java.util.zip不同,truezip允许指定zip文件编码。下面是另一个示例,这次显式指定了编码。IBM437、UTF-8 和 ISO-8859-1 都不适用于 Linux。IBM437 适用于 Windows。
import java.io.IOException;
import de.schlichtherle.io.FileOutputStream;
import de.schlichtherle.util.zip.ZipEntry;
import de.schlichtherle.util.zip.ZipOutputStream;
public class Main {
public static void main(final String[] args) throws IOException {
for (String encoding : new String[] { "IBM437", "UTF-8", "ISO-8859-1" }) {
ZipOutputStream zipOutput = new ZipOutputStream(
new FileOutputStream(encoding + "-example.zip"), encoding);
ZipEntry entry = new ZipEntry("abc-åäö.txt");
zipOutput.putNextEntry(entry);
zipOutput.closeEntry();
zipOutput.close();
}
}
}