Poprawne dekodowanie nazw plików zip - CP437, UTF-8 lub?

Niedawno napisałem bibliotekę I / O pliku zip o nazwieZipzap, ale walczę z poprawnym dekodowaniem nazw plików zip z dowolnych plików zip.

TerazSpecyfikacja PKWARE stwierdza:

D.1 Format ZIP w przeszłości obsługiwał tylko oryginalny zestaw kodowania znaków IBM PC, powszechnie określany jako IBM Code Page 437 ...

D.2 Jeśli bit ogólnego przeznaczenia 11 jest wyłączony, nazwa pliku i komentarz powinny być zgodne z oryginalnym kodowaniem znaków ZIP. Jeśli ustawiony jest bit ogólnego przeznaczenia 11, nazwa pliku i komentarz muszą obsługiwać standard Unicode Standard, wersja 4.1.0 lub nowsza, przy użyciu formularza kodowania znaków zdefiniowanego przez specyfikację pamięci UTF-8 ...

co oznacza, że ​​zgodne pliki zip kodują nazwy plików jako CP437, chyba że ustawiony jest bit EFS, w którym to przypadku nazwy plików to UTF-8.

Niestety wydaje się, że wiele narzędzi zip nie ustawia poprawnie EFS bit (np. Mac CLI, GUI zip) lub używa innego kodowania, zazwyczaj domyślnego systemu (np. WinZip?). Jeśli wiesz, jak WinZip, 7-Zip, Info-Zip, PKZIP, Java JAR / Zip, .NET zip, dotnetzip, itp. Kodują nazwy plików i co ustawiają swoje pole „wersja wykonana przez”, gdyzapinanie, Powiedz mi, Proszę.

W szczególności Info-Zip próbuje tego, kiedyrozpakowywanie:

System plików = MS-DOS (0) => CP437z wyjątkiem: wersja = 2.5, 2.6, 4.0 => ISO 8859-1System plików = HPFS (6) => CP437System plików = NTFS (10) i wersja = 5.0 => CP437w przeciwnym razie ISO 8859-1

Jeśli chcę wspierać sprawdzanie lub wyodrębnianie z dowolnych plików zip i zrobićrozsądny próba kodowania nazwy pliku bez flagi EFS, czego mogę szukać?

questionAnswers(2)

yourAnswerToTheQuestion