用阿拉伯字符创建zip文件

时间:2012-09-26 09:18:50

标签: java file encoding zip apache-poi

我有以下情况 我必须修改现有文件并返回包含此修改文件的zip,我在Web应用程序上下文中 我现在所做的是:

///////////////// 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]);
              } 

如果原始文件在阿拉伯语中被写错,则无法使用word正确读取创建的压缩文件

我试过这个:

 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());
                }

它不起作用

2 个答案:

答案 0 :(得分:2)

java zip实现中存在一个旧错误。它应该在v7中修复。 http://bugs.sun.com/view_bug.do?bug_id=4244499

答案 1 :(得分:1)

您可能还想使用apache commons-io FileUtils为Java File操作提供了许多方便的方法 - 读取和写入文件等...

读取和写入方法也有编码参数。

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

ZipFile允许您设置正确的编码。

ZipFile(String name,String encoding) 打开给定的文件进行读取,假定指定的文件名编码,扫描unicode额外字段。