Каков наилучший способ добавить не-ASCII имена файлов в почтовый файл с использованием Java, таким образом, что файлы могут быть правильно читать в оба 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-файла. Вот еще один пример, на этот раз явно указывающий кодировку. В Linux не работают ни IBM437, ни UTF-8, ни ISO-8859-1. 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 работал для меня на окнах 7 и mac os x 10.6.x. Он все еще не работает в Linux? – 2009-11-23 17:37:34
Была давняя ошибка - 9 лет существования - в JDK до версии v7, которая предотвратила правильную обработку имен файлов с именами, которые не могли быть закодированы с помощью 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