Agregue nombres de archivos que no sean ASCII a zip en Java

¿Cuál es la mejor manera de agregar?no ASCII nombres de archivos aarchivo zip utilizandoJava, de tal manera que los archivos puedan leerse correctamente tanto enWindows yLinux?

Aquí hay un intento, adaptado dehttps://truezip.dev.java.net/tutorial-6.html#Example, que funciona en Windows Vista pero falla en Ubuntu Hardy. En Hardy, el nombre del archivo se muestra como abc-ЖДФ.txt en file-roller.

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();
        }
    }
}

A diferencia de java.util.zip, truezip permite especificar la codificación del archivo zip. Aquí hay otra muestra, esta vez especificando explícitamente la codificación. Ni IBM437, UTF-8 ni ISO-8859-1 funcionan en Linux. IBM437 funciona en 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();
        }
    }
}

Respuestas a la pregunta(7)

Su respuesta a la pregunta