Распакуйте unicode имя файла ошибки в Android - PullRequest
4 голосов
/ 27 июля 2011

У меня есть zip-файл, который включает в себя один файл: "Indulás előtt.html" (это венгерский текст)

Но когда я пытаюсь распаковать архив, я получаю сообщение об ошибке в строке getNextEntry:

try {
    ZipInputStream zis = newZipInputStream(getResources().openRawResource(R.raw.ie));
    ZipEntry ze = null;
    while ((ze = zis.getNextEntry()) != null) {
        info.setText(info.getText() + "\nName: " + ze.getName());
    }
} catch (Exception e) {
    info.setText(info.getText() + "\nERROR: " + e.getMessage());
}

и сообщение об ошибке: «Вход на 5 не соответствует спецификации UTF8»

Позже я попытался в другом режиме:

ZipFile zipfile = new ZipFile(file);
for (Enumeration e = zipfile.entries(); e.hasMoreElements();) {
    ZipEntry entry = (ZipEntry) e.nextElement();
    String name = new String(entry.getName().getBytes("UTF-8"), "UTF-8");
    info.setText(info.getText() + "\nName: " + name);
}

, но отобразил это:

Изображение

Что такое решение ???

Текст включает в себя следующие буквы:

ссылка № 1: http://en.wikipedia.org/wiki/%C3%81

ссылка # 2: http://en.wikipedia.org/wiki/%C5%90#Hungarian

1 Ответ

0 голосов
/ 11 февраля 2015

Набор символов имени файла zip может быть неоднозначным.Реализация zip в Java 7 должна быть способна обнаруживать флаг UTF-8 (http://docs.oracle.com/javase/7/docs/api/java/util/zip/package-summary.html#lang_encoding), но это зависит от того, как приложение упаковки правильно закодировало имя файла и установило необходимый флаг UTF-8.

IПодозреваю, что ваш zip-файл был упакован неправильно или не использует имя файла UTF-8. Попытка передачи набора символов Zip по умолчанию: Cp437

Например,

ZipInputStream zis = new ZipInputStream(getResources().openRawResource(R.raw.ie), Charset.forName("Cp437"));
...