Submitted On 27-SEP-2003
hhwindspirit
It's a old problem...
Submitted On 26-OCT-2003
breezee26
here is a workaround for this bug.
- create a new package with 3 classes ZipInputStream,
ZipConstants and ZipEntry
- copy the source code from the corresponding java.util.zip
package
- according to the workaround of lallinec (THU FEB 20 03:04
A.M. 2003)
to bug #4415733, in ZipInputStream, fix the readLOC()
method :
// Old Code:
// ZipEntry e = createZipEntry(getUTF8String(b,0,len));
String fileName = null;
try{
fileName = getUTF8String(b, 0, len);
}catch (Exception ex){
fileName = new String(b, System.getProperty
("file.encoding"));
}
ZipEntry e = createZipEntry(fileName);
- edit the new ZipEntry, remove the static initializer that calls
the native methods initIDs().
this step seems a bit scary, but it's according to the
workaround
to bug #4244499 (the workaround of Olive64, THU JUN 05
01:55 P.M. 2003),
that handles a similar bug at the ZipOutputStream.
Now you have a ZipInputStream that supports multi-bytes
entry names.
to extract the zip file, using the fixed code that is offered
above,
create a function that gets an "encoding" string, a "destPath"
string
and a "sourceFile" (zipped) and does :
ZipInputStream zipinputstream = null;
ZipEntry zipentry;
zipinputstream = new ZipInputStream(new FileInputStream
(sourceFile),encoding);
zipentry = zipinputstream.getNextEntry();
while (zipentry != null) { //for each entry to be extracted
String entryName = zipentry.getName();
int n;
FileOutputStream fileoutputstream = new FileOutputStream
( destPath + entryName );
while ((n = zipinputstream.read(buf, 0, 1024)) > -1)
fileoutputstream.write(buf, 0, n);
fileoutputstream.close();
zipinputstream.closeEntry();
zipentry = zipinputstream.getNextEntry();
}//while
zipinputstream.close();
Submitted On 09-DEC-2003
faralla
I am trying that workaround, but I have several
problems.
You say: "create a new package". Do you
mean, "create a package with an own name"? Then I
have the problem, that for example ZipInputStream
cannot access usesDefaultInflater.
when I call the packe also "java.util.zip" I have the
problem that it won´t be used. at least not when
running in Tomcat since I have to use it in a servlets.
Any comments on that?
Thanks,
Philipp
Submitted On 08-APR-2004
scsulliv
Is this fixed in J2SE 1.5.0 ?
Submitted On 20-JAN-2005
dbeutner
Hi,
this is a duplicate of acknowledged real bugs 4244499 and 4688771 , at the moment of writing both within the bugs top25.
For the first one being the original and leading in top25, I would suggest to move the votes to it. This one could be closed as duplicated.
Adding encoding parameter does not lead to any backwards compatibility issues, what a nonsense :-(
No, it is not fixed with 1.5 :-(
Hey, it's such a fresh bug, only six years old, what do you expect... ;-(
Submitted On 04-JUL-2005
MartinHilpert
The workaround of breezee26 doesn't work for me: I get an
java.util.zip.ZipException: ZIP file must have at least one entry
Exception even though I _have_ entries (proved by reverting back to java ZipOutputStream it works again - of course with faulty special characters).
Submitted On 26-AUG-2005
Marcelo9
It is incredible that this problem is taking Sun so long time. SO SERIOUS BUG LIKE THIS!!!!!
I think I will open the source code and I will fix that!!!!!
Submitted On 26-SEP-2005
inzaghi101
Has anyone solved this problem?
Submitted On 22-NOV-2005
MartinHilpert
A working solution so far?
Submitted On 03-JAN-2006
Gravityzhong
I googled this problem and found that the zip library in apache ant (org.apache.tools.zip.*) can read zip archives correctly. It adds a "encoding" argument to the constructor of ZipFile.
But when it comes to create zip archives, there still is a problem. If I use jar / java.util.zip.ZipOutputStream / org.apache.tools.zip.ZipOutputStream to put a file with chinese filename in a zip archive, then the unzip program on Linux cannot list or extract the archive correctly. It's strange that jar, ZipOutputStream and unzip are all using UTF8!
I created another archive using org.apache.tools.zip.ZipOutputStream with the option that Chinese filenames are encoded in GBK. Chinese WindowsXP can correctly extract this archive.
It seems that the unzip(5.51) program on Linux is buggy.
Submitted On 07-JAN-2008
proveindia
I am getting java.lang.IllegalArgumentException while extracting the ZIP file which is zipped using WINZIP 10. is there any workaround to solve this issue from SUN or other utility ?.
I tried to encoding using GB2312 /GBK then I am not getting this exception, however Japanese character comes as Question mark.
This issue makes my life BIG QUESTION MARK ?.
Any Help will be appreciated...
PLEASE NOTE: JDK6 is formerly known as Project Mustang
|