Неправильная кодировка в комментарии ZipFile

1

Я читаю комментарий ZIP файла, используя класс Ionic.Zip.ZipFile, и, похоже, проблема с акцентированными символами (например, éêè). В моем случае вместо получения "Éric" я получаю "╔ric".

Мой код:

using (ZipFile zipFile = new ZipFile(path))
{
  comment = zipFile.Comment;
}

Путь - это путь к файлу ZIP. Я также попытался поместить кодировку напрямую, но тот же результат (например):

using (ZipFile zipFile = new ZipFile(path, Encoding.UTF8))
{
  comment = zipFile.Comment;
}

Есть ли конкретная кодировка для комментария?

  • 0
    Какую библиотеку Zip вы используете? System.IO.Compression.ZipFile не имеет такого конструктора. Комментарий аспект формата файла ZIP беспорядок. Похоже, Unicode был взломан в формате Zip. Если я правильно прочитал спецификацию, есть два поля для комментариев: старое и новое в Юникоде. Есть поле для определения формата комментария. Я не уверен, что это поможет, так как это, вероятно, определяется библиотекой, которую вы используете. См. Pkware.com/documents/casestudies/APPNOTE.TXT.
  • 0
    Я использую Ionic.Zip.dll, как я сказал в начале своего поста.
Показать ещё 2 комментария
Теги:
zip

1 ответ

1
Лучший ответ

Благодаря Moby Disk я нашел решение. Вам нужно получить правильную кодировку комментария перед ее кодировкой с той, которую вы используете (в моем случае по умолчанию).

Код выглядит следующим образом:

using (ZipFile zipFile = new ZipFile(path))
{
  byte[] bytes = Encoding.GetEncoding(437).GetBytes(zipFile.Comment);
  comment = Encoding.Default.GetString(bytes);
}
  • 0
    Я рад, что смог указать вам правильное направление. Нет ничего плохого в том, чтобы ответить на свой вопрос, поэтому не стесняйтесь принять его. С этим решением вы ограничены символами, которые находятся в кодовой странице 437?
  • 0
    Вероятно, я буду ограничен этим набором символов, но в моем случае это нормально. В комментарии к zip-файлу не будет другого символа, кроме списка, который я видел, потому что в нем будут только имена клиентов, номера версий и даты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню