ZipInputStream (InputStream, Charset )неверно декодирует имя файла ZipEntry

В 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());
   ...
}
5
задан kriegaex 30 June 2012 в 17:56
поделиться