В Java 7 предполагается решить старую проблему с распаковкой zip-архивов с наборами символов, отличными от UTF -8. Этого можно добиться с помощью конструктора ZipInputStream(InputStream, Charset)
. Все идет нормально. Я могу распаковать zip-архив, содержащий имена файлов с умлаутами в них, при явном задании набора символов ISO -8859 -1.
Но вот в чем проблема :При переборе потока с использованием ZipInputStream.getNextEntry()
записи имеют неправильные специальные символы в своих именах. В моем случае умлаут "ü" заменяется на "?" характер, что явно неправильно. Кто-нибудь знает, как это исправить? Очевидно, ZipEntry
игнорирует Charset
лежащего в его основе ZipInputStream
.Похоже, это еще одна ошибка JDK, связанная с zip -, но я тоже могу делать что-то не так.
...
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());
...
}