拉上什麼是非ASCII文件名添加到使用的Java,以這樣的方式,該文件可以被正確讀取的zip文件的最佳方式都是Windows和Linux?添加非ASCII文件名中的Java
下面是一個嘗試,改編自https://truezip.dev.java.net/tutorial-6.html#Example,它適用於Windows Vista,但在Ubuntu Hardy中失敗。在Hardy中,文件名稱在文件滾輪中顯示爲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();
}
}
}
truezip使用UTF-8爲我工作在Windows 7和Mac OS X 10.6.x.它仍然不能在Linux中工作? – 2009-11-23 17:37:34
存在一個長期存在的bug - 存在9年 - 在v7之前的JDK中,它阻止了正確處理名稱不能用IBM CP437編碼的文件名。 http://bugs.sun.com/bugdatabase/view_bug.do?bug%5Fid=4244499它顯然已在JDK7中修復。 https://blogs.oracle.com/xuemingshen/entry/non_utf_8_encoding_in因此,一種解決方案似乎是使用JDK7和ZipInputStream,ZipOutputStream和ZipFile的新構造函數。 – Cheeso 2012-06-15 16:53:56