Ordnungsgemäße Dekodierung von ZIP-Dateinamen - CP437, UTF-8 oder?

Ich habe kürzlich eine Zip-Datei geschrieben, die ich als E / A-Bibliothek bezeichneZip Zap, aber ich kämpfe mit der korrekten Dekodierung von ZIP-Dateinamen aus beliebigen ZIP-Dateien.

Jetzt diePKWARE spec Zustände:

D.1 Das ZIP-Format hat in der Vergangenheit nur den ursprünglichen IBM PC-Zeichensatz unterstützt, der im Allgemeinen als IBM Code Page 437 ... bezeichnet wird.

D.2 Wenn das Universalbit 11 nicht gesetzt ist, sollten der Dateiname und der Kommentar der ursprünglichen ZIP-Zeichenkodierung entsprechen. Wenn das Universal-Bit 11 gesetzt ist, müssen der Dateiname und der Kommentar den Unicode-Standard, Version 4.1.0 oder höher, unter Verwendung der Zeichencodierungsform unterstützen, die in der UTF-8-Speicherspezifikation definiert ist.

Das bedeutet, dass konforme ZIP-Dateien Dateinamen wie CP437 codieren, sofern das EFS-Bit nicht gesetzt ist. In diesem Fall lauten die Dateinamen UTF-8.

Leider scheint es, dass viele Zip-Tools entweder das EFS-Bit nicht richtig setzen (z. B. Mac CLI, GUI zip) oder eine andere Codierung verwenden, normalerweise die Standard-System-Codierung (z. B. WinZip?). Wenn Sie wissen, wie WinZip, 7-Zip, Info-Zip, PKZIP, Java JAR / Zip, .NET-Zip, Dotnetzip usw. Dateinamen verschlüsseln und wie sie das Feld "Version erstellt von" auf wann einstellenReißverschluss, Erzähl es mir bitte.

Insbesondere versucht Info-Zip dies, wennEntpacken:

Dateisystem = MS-DOS (0) => CP437außer: Version = 2.5, 2.6, 4.0 => ISO 8859-1Dateisystem = HPFS (6) => CP437Dateisystem = NTFS (10) und Version = 5.0 => CP437ansonsten ISO 8859-1

Wenn ich das Inspizieren oder Extrahieren von beliebigen ZIP-Dateien unterstützen und eineangemessen versuche die Dateinamenkodierung Was kann ich ohne die EFS-Flagge suchen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage