create zip files with arabic characters

2019-07-31 16:01发布

问题:

i have the following situation i have to modify an existing files and return a zip containing this modified files , i'm in web application context what i done up to now is :

///////////////// modifying the existing file with poi librairy 
    FileInputStream inpoi = new   FileInputStream("file_path");
                POIFSFileSystem fs = new POIFSFileSystem(inpoi);
                HWPFDocument doc = new HWPFDocument(fs);
                Range r = doc.getRange();
                r.replaceText("<nomPrenom>","test"); 
               byte[] b =   doc.getDataStream();

//////////////////////// create the zip file and copy the modified files into it 
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("my.zip"));
out.putNextEntry(new ZipEntry("file"));
for (int j = 0; j < b.length; j++) {
                out.write(b[j]);
              } 

the created zipped file can't be read correctly with word given that the original file is wrotten in arabic

i tried to this :

 try {
                 FileInputStream inpoi = new FileInputStream("C:\\Users\\free\\Desktop\\myworkspace\\gestionRH\\WebRoot\\fiches\\blame.doc");
                    POIFSFileSystem fs = new POIFSFileSystem(inpoi);
                    HWPFDocument doc = new HWPFDocument(fs);
                    Range r = doc.getRange();
                    r.replaceText("<nomPrenom>","test"); 
                  byte[] stream=   doc.getDataStream();
                  String encoding = "utf-16";
                  ZipOutputStream out = new ZipOutputStream(new FileOutputStream("yyy.zip"));
                   ZipEntry zipEntry = new ZipEntry("file.doc");
                   OutputStreamWriter writer = new OutputStreamWriter(out,"utf-8");
                    out.putNextEntry(zipEntry);
                    for (int j = 0; j < stream.length; j++) {
                        writer.write(stream[j]);  
                  }
                  writer.close();
                } catch (IOException e) {
                  System.out.println(e.toString());
                }

it doesn't work

回答1:

There was an old bug in java zip implementation. It should be fixed in v7. http://bugs.sun.com/view_bug.do?bug_id=4244499



回答2:

You may also want to use apache commons-io FileUtils offer alot of handy methods for Java File operation - reading and writing files etc...

The read and write Methods also have an encoding parameters.

http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

ZipFile allows you to set the proper encoding.

ZipFile(String name, String encoding) Opens the given file for reading, assuming the specified encoding for file names, scanning unicode extra fields.