Jason Li
Jason Li

Reputation: 1585

.zip file created by Java doesn't support Chinese(utf-8)

I want to create a .zip file using Java(jdk, ant.jar or commons-compress).

But if the ZipEntry's name contains non-English(eg. Chinese, Japanese), it will display unreadable code in WinRAR or Windows Compress(commons-compress display correctly in WinRAR).

Who can help me!!!

Upvotes: 2

Views: 2324

Answers (3)

mathi
mathi

Reputation: 1147

try this by using apache commons compress,

import java.io.*;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
public class ZipFiles {  
   public static void main(String[] args) throws Exception{
       ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(new FileOutputStream("测试.zip"));
       zipOut.setEncoding("Cp437"); // This should handle your "special" characters
       zipOut.setFallbackToUTF8(true); // For "unknown" characters!
       zipOut.setUseLanguageEncodingFlag(true);                               
       zipOut.setCreateUnicodeExtraFields(
       ZipArchiveOutputStream.UnicodeExtraFieldPolicy.NOT_ENCODEABLE);
       zipOut.putArchiveEntry(new ZipArchiveEntry("测试.xml"));
       zipOut.putArchiveEntry(new ZipArchiveEntry("test.xml"));
       zipOut.closeArchiveEntry();
       zipOut.flush();
       zipOut.close();
   }
}

Upvotes: 1

J-16 SDiZ
J-16 SDiZ

Reputation: 26910

You have hit one of the Top 25 java bug.

Good news is this is already resolved. Bad news it it is fixed only in JDK7. See this entry for details.

Alternativlly, you can use Arcmexer (readonly).

Upvotes: 1

Carlos Tasada
Carlos Tasada

Reputation: 4444

Take a look to 7-Zip-JBinding it's a Java wrapper for 7zip.

Upvotes: -1

Related Questions