Dobry den,
potreboval by som v Jave vytvorit zip archiv obsahujuci subory s diakritikou v nazvoch. Je mi jasne ze zip format to podla specifikacie neumoznuje tak aby nazvy suborov vo vytvorenom archive boli korektne zobrazene v kazdom unzip programe. Chcel by som aby nazvy boli korektne pri zobrazeni vo Windows "Compressed (zipped) folder".

Skusam to na Windows 7 s nastavenym Location na Slovakia. Volanie java.nio.charset.Charset.defaultCharset() mi vrati kodovanie Windows-1250. Docital som sa ze Windows "Compressed (zipped) folder" pouziva default kodovanie pre nazvy suborov podla nastaveni systemu, preto uvazujem zatial len o tom ze v nazvoch suborov mozu byt len znaky z kodovania Windows-1250.

Podarilo sa mi vytvorit archiv obsahujuci nazvy suborov korektne zobrazene v nahlade obsahu zipu cez Total Commander (TC). Vo Windows "Compressed (zipped) folder" je zobrazenie vo vsetkych pripadoch nekorektne.

Pre nahlad v TC su vysledky nasledovne:
1./ Java 6 - no ok
2./ Java 7 - ok
3./ org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream - ok
4./ Java 7 s explicitne nastavenym UTF-8 kodovanim pomocou konstruktora ZipOutputStream(OutputStream out, Charset charset) - ok 5./ org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream s nastavenym UTF-8 - ok 6./ Java 7 s nastavenym Windows-1250 kodovanim pomocou konstruktora ZipOutputStream(OutputStream out, Charset charset) - no ok 7./ org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream s nastavenym Windows-1250 kodovanim - no ok

Riesili ste takyto problem?

Prikladam kratky program pre Javu 7 na testovanie, keby sa niekto chcel hrat:

java.util.zip.ZipOutputStream zip = new java.util.zip.ZipOutputStream(new java.io.BufferedOutputStream(new java.io.FileOutputStream(zipped)), java.nio.charset.Charset.forName("Windows-1250"));

    zip.putNextEntry(new java.util.zip.ZipEntry("ahojľščťžýáíé.txt"));
    zip.write("ahoj".getBytes());

    zip.closeEntry();
    zip.close();



S pozdravom,
Andrej Ferko

Odpovedet emailem