当我使用 ZipOutputStream 和 ZipEntry 将一些文件压缩成一个zip文件时,我发现解压缩zip文件时阿拉伯文件名已损坏,尽管英文文件名是正确的。
e.g。 ╪┤╪▒┘â╪⌐ ╪º┘å╪╕┘à╪⌐ ╪º┘ä╪º╪¬╪╡╪º┘ä╪º╪¬ ┘ê╪º┘ä╪¡┘ä┘ê┘ä ╪º┘ä╪ú┘à┘å┘è╪⌐ ╪º┘ä┘à╪¡╪»┘ê╪»╪⌐
بيان المشاريع السابقة
Java版本:1.6
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);
}
}
答案 0 :(得分:0)
这是JDK6中的bug。 same problem是在任何非ascii文件名上生成的。要解决此问题,您可以尝试: