How to add zip entry with utf
I have a method which adds inputStream to zip as an entry:
private void addToZip(InputStream is, String filename) throws Exception {
try {
ZipEntry zipEntry = new ZipEntry(filename);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = is.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
} finally {
IOUtils.closeQuietly(is);
}
}
The problem occurs when the filename contains an UTF-8 char like áé... In zip file it will be saved as ?????
and when I unzip it in ubuntu 12.10 it looks like: N├бstroje
instead of Nástroje
.
For this example I used jdk6 but now I've also tried jdk7:
zos = new ZipOutputStream(fos, Charset.forName("UTF-8"));
But with no success.
I also tried Apache Commons Zip and set encoding but also with no success.
So how I can add this file with unicode symbols in filename to zip ?
seems this line solved my problem:
zos.setCreateUnicodeExtraFields(UnicodeExtraFieldPolicy.ALWAYS);
can someone explain me what is this doing and why it works ?
Zip archive by default uses DOS(OEM) codepage to store filenames. Linux/unix implementations uses system codepage when unpacking. Mac OS uses utf-8 by default. So in your case filename is stored correctly, but Linux archiver doesn't understand it.
链接地址: http://www.djcxy.com/p/70196.html上一篇: 如何使用Log4Net实用程序使用c#登录到数据库
下一篇: 如何使用utf添加zip条目