Niedawno napisałem bibliotekę we/wy pliku zip o nazwie zipzap, ale mam problemy z poprawnym odszyfrowaniem nazw plików wejściowych zip z dowolnych plików zip.Prawidłowe odszyfrowywanie nazw plików zip - CP437, UTF-8 lub?
Teraz, PKWARE spec stany:
D.1 Format ZIP historycznie obsługiwane tylko oryginalny zestaw znaków IBM PC kodowanie , powszechnie nazywany IBM CP437 ...
D.2 Jeśli bit 11 ogólnego zastosowania jest nieuzbrojony, nazwa pliku i komentarz powinny być zgodne z oryginalnym kodowaniem znaków w formacie ZIP pod numerem . Jeśli ogólnego przeznaczenia bit 11 jest ustawiony, nazwa pliku i komentarz musi obsługiwać standard Unicode, wersja 4.1.0 lub większą pomocą formularza kodowania znaków zdefiniowanego przez UTF-8 przechowywania specyfikacji ...
który 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 mają format UTF-8.
Niestety wydaje się, że wiele narzędzi zip nie ustawia poprawnie bitu EFS (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ą pole "wersja wykonana" na z zamkiem, proszę Powiedz mi.
W szczególności, próbuje Info-Zip to kiedy rozpakować:
- systemu plików = MS-DOS (0) => 437,
- z wyjątkiem: version = 2,5, 2,6, 4,0 = > System ISO 8859-1
- file = HPFS (6) => System 437,
- File = NTFS (10) i wersja = 5,0 => 437,
- inaczej, ISO 8859-1
Jeśli chcę wspierać kontrolę lub wydobywania z dowolnych plików zip i zrobić rozsądny próbę kodowania nazw plików bez flagi EFS, co mogę patrzeć dla?