Java 7은 UTF-8 이외의 문자 세트로 압축 파일을 압축 해제하면 이전 문제를 해결할 예정입니다. 이것은 생성자 ZipInputStream(InputStream, Charset)
에 의해 달성 될 수있다. 여태까지는 그런대로 잘됐다. ISO-8859-1 문자 세트를 명시 적으로 설정할 때 파일 이름에 움라우트가 포함 된 zip 아카이브를 압축 해제 할 수 있습니다.ZipInputStream (InputStream, Charset)은 ZipEntry 파일 이름을 잘못 해석합니다.
여기에이 있습니다. ZipInputStream.getNextEntry()
을 사용하여 스트림을 반복 할 때 항목의 이름에 잘못된 특수 문자가 있습니다. 제 경우에는 움라우트 "ü"가 "?"로 대체됩니다. 문자는 분명히 잘못되었습니다. 아무도이 문제를 해결하는 방법을 알고 있습니까? 분명히 ZipEntry
은 Charset
의 기본이되는 ZipInputStream
을 무시합니다. 아직 다른 zip 관련 JDK 버그처럼 보입니다. 그러나 나는 잘못된 것도하고있을 것입니다.
...
zipStream = new ZipInputStream(
new BufferedInputStream(new FileInputStream(archiveFile), BUFFER_SIZE),
Charset.forName("ISO-8859-1")
);
while ((zipEntry = zipStream.getNextEntry()) != null) {
// wrong name here, something like "M?nchen" instead of "München"
System.out.println(zipEntry.getName());
...
}
Java SE6의 모범 사례는 무엇입니까? (SE7로 업그레이드하는 것 외에도 :) – basZero
SE6 : VM 매개 변수'zip.altEncoding' 또는'zip.encoding'을'Cp437' 또는'ISO-8859-1'로 설정했는데 두 가지 모두 올바르게 읽는 데 도움이되지 않았습니다. – basZero
@ basZero : Apache Commons 압축은 잘 작동합니다. 나는 out-of-the-box 해결책을 찾지 못했습니다. – kriegaex