我必須使用apache-commons-compress-1.x
API創建文件zip。 我用下面的代碼:ZipArchiveEntry字符集編碼錯誤
File fileZip = new File("D:\\file.zip");
ZipEncoding zipEncoding = ZipEncodingHelper.getZipEncoding("UTF8");
ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(fileZip);
zipOut.setEncoding("UTF-8");
File entryFile = new File("D:\\attività.jpg");
String entryName = entryFile.getName();
entryName = new String(entryName.getBytes("UTF-8"), "UTF-8");
ZipArchiveEntry entry = new ZipArchiveEntry(entryName);
entry.setSize(entryFile.length());
FileInputStream fInputStream = new FileInputStream(entryFile);
zipOut.setUseLanguageEncodingFlag(true);
zipOut.setCreateUnicodeExtraFields(ZipArchiveOutputStream.UnicodeExtraFieldPolicy.ALWAYS);
zipOut.putArchiveEntry(entry);
zipOut.write(IOUtils.toByteArray(fInputStream));
zipOut.closeArchiveEntry();
zipOut.flush();
zipOut.close();
ZIP條目文件名有一個編碼錯誤。如果我用zip管理器構建windows xp打開壓縮文件,文件名是attivit+á.jpg
。 請幫助我。
您正在使用XP的內置ZIP管理器?你確定它使用UTF-8嗎?輸出看起來更像8位字符集(例如CP1252) – 2012-02-06 12:10:27
在控制面板 - >區域和語言選項 - >高級(製表符)中。有65001(UTF-8)和其他代碼頁(意大利語) – 2012-02-06 13:50:54
您可以使用'entryName =「attivit \ u00E0-jpg」'?這可以確保.class使用正確的編碼。 getBytes等是多餘的。暫時停下來看看Windows用這個zip文件做什麼。 – 2012-02-06 14:45:49