使用ZipOutputStream和ZipEntry时,阿拉伯语文件名称已损坏

时间:2016-03-01 07:52:26

标签: java arabic

当我使用 ZipOutputStream ZipEntry 将一些文件压缩成一个zip文件时,我发现解压缩zip文件时阿拉伯文件名已损坏,尽管英文文件名是正确的。

e.g。 ╪┤╪▒┘â╪⌐ ╪º┘å╪╕┘à╪⌐ ╪º┘ä╪º╪¬╪╡╪º┘ä╪º╪¬ ┘ê╪º┘ä╪¡┘ä┘ê┘ä ╪º┘ä╪ú┘à┘å┘è╪⌐ ╪º┘ä┘à╪¡╪»┘ê╪»╪⌐

而不是:بيان المشاريع السابقة

Java版本:1.6

我的代码(起始点convertToZip):

public void convertToZip(OAApplicationModule oaapplicationmodule,Number AuctionHeaderID)
  {
        OADBTransaction oadbtransaction = oaapplicationmodule.getOADBTransaction();
        OracleResultSet rsZippedEmptyBlob= PrepareNewZipProcess ( oadbtransaction , AuctionHeaderID) ;

        try
        {
            if ( !rsZippedEmptyBlob.next() )
            {
                return ;
            }
            OracleResultSet rLoopSourceBlob =  (OracleResultSet)GetBlobResultSetFromRFX ( oadbtransaction , AuctionHeaderID ) ;
            BLOB zippedEmptyBlob = rsZippedEmptyBlob.getBLOB(1);
            ZipOutputStream zosFinal = new ZipOutputStream ( zippedEmptyBlob.getBinaryOutputStream()); 
            zosFinal.setMethod(ZipOutputStream.DEFLATED); 
            byte[] bytesArrayFromSourceBlob = new byte[1024]; 
            while(rLoopSourceBlob.next())
            {
                BLOB sourceBlobFile = rLoopSourceBlob.getBLOB(1);     
                ZipEntry zippedSingleFileName = new ZipEntry( rLoopSourceBlob.getString(2)  ) ;
                zosFinal.putNextEntry(zippedSingleFileName);
                int lengthRead ;
                InputStream DocumentStream = sourceBlobFile.getBinaryStream();

                while((lengthRead=DocumentStream.read(bytesArrayFromSourceBlob))>=0) //>0
                    {       
                        zosFinal.write(bytesArrayFromSourceBlob,0,lengthRead);
                    }
                sourceBlobFile.getBinaryStream().close();
                zosFinal.closeEntry();
            }
            zosFinal.close();
            oadbtransaction.commit();
        }
        catch ( Exception ex )
        {
            throw OAException.wrapperException(ex);
        }

  }

1 个答案:

答案 0 :(得分:0)

这是JDK6中的bugsame problem是在任何非ascii文件名上生成的。要解决此问题,您可以尝试:

  1. 使用JDK7(b57)或更高版本
  2. 或使用其他zip库,例如Apache Commons