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