Java 使用ZipOutputStream和ZipEntry时,阿拉伯文文件名已损坏
当我使用ZipOutputStream和ZipEntry将一些文件压缩到一个zip文件时,我发现在解压缩zip文件时,阿拉伯语文件名已损坏,尽管英语文件名是正确的 e、 g.Java 使用ZipOutputStream和ZipEntry时,阿拉伯文文件名已损坏,java,arabic,Java,Arabic,当我使用ZipOutputStream和ZipEntry将一些文件压缩到一个zip文件时,我发现在解压缩zip文件时,阿拉伯语文件名已损坏,尽管英语文件名是正确的 e、 g.╪┤╪▒┘â╪⌐ ╪º┘å╪╕┘à╪⌐ ╪º┘ä╪º╪¬╪╡╪º┘ä╪º╪¬ ┘ê╪º┘ä╪¡┘ä┘ê┘ä ╪º┘ä╪ú┘à┘å┘è╪⌐ ╪º┘ä┘à╪¡╪»┘ê╪»╪⌐ 而不是: Java版本:1.6 我的代码(起点convertToZip): 这是JDK6中的一个示例。在任何非ascii文件名上生成。要解决此问题,您可以
╪┤╪▒┘â╪⌐ ╪º┘å╪╕┘à╪⌐ ╪º┘ä╪º╪¬╪╡╪º┘ä╪º╪¬ ┘ê╪º┘ä╪¡┘ä┘ê┘ä ╪º┘ä╪ú┘à┘å┘è╪⌐ ╪º┘ä┘à╪¡╪»┘ê╪»╪⌐代码>
而不是:
Java版本:1.6
我的代码(起点convertToZip):
这是JDK6中的一个示例。在任何非ascii文件名上生成。要解决此问题,您可以尝试以下任一方法:
使用JDK7(b57)或更高版本
或者使用不同的zip库,例如
请回答您的问题,并向我们展示您使用的代码。还请提供一些示例文件的名称。您使用的Java版本是什么?我添加了代码,Java版本为1.6,可能与Java版本重复。您的意思是Java版本中的问题。我需要使用ZipArchiveOutputStreamNo的示例,这将超出您的问题范围。
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);
}
}