Adicionar nomes de arquivos não-ASCII ao zip em Java

Qual é a melhor maneira de adicionarnão-ASCII nomes de arquivos para umarquivo zip usandoJava, de tal forma que os arquivos possam ser lidos corretamentejanelas eLinux?

Aqui está uma tentativa, adaptada dehttps://truezip.dev.java.net/tutorial-6.html#Example, que funciona no Windows Vista, mas falha no Ubuntu Hardy. No Hardy, o nome do arquivo é mostrado como abc-ЖДФ.txt no 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();
        }
    }
}

Ao contrário de java.util.zip, o truezip permite especificar a codificação do arquivo zip. Aqui está outro exemplo, desta vez especificando explicitamente a codificação. Nem IBM437, UTF-8 nem ISO-8859-1 funcionam no Linux. O IBM437 funciona no 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();
        }
    }
}

questionAnswers(7)

yourAnswerToTheQuestion