ZIP-Dateinamen mit Umlauten kaputt unter Windows
Wenn Dateinamen in einer ZIP-Datei nach dem Wechsel von einem Mac zu Windows verstümmelt aussehen, gibt es in der Regel zwei Ursachen. Beide lassen sich beheben, ohne den Inhalt der Dateien anzufassen. Entweder speichert das Archiv die Namen in einer Zeichenkodierung, die Windows falsch liest (Sie sehen dann etwas wie Müller.pdf). Oder die Namen liegen in der zerlegten Unicode-Form vor, die macOS häufig verwendet. Dann werden Umlaute und Akzente in Einzelteile zerlegt (Mu¨ller.pdf, Gro᪠e_Liste.xlsx). Der erste Fall wird durch Entpacken mit einem anderen Werkzeug gelöst, der zweite durch Umwandeln der Namen in die NFC-Form. Das geht im Browser oder mit einem kurzen PowerShell-Befehl. Die Schritte unten behandeln beide Fälle.
Warum ZIP-Dateinamen zwischen Mac und Windows kaputtgehen
Das ZIP-Format speichert jeden Dateinamen als rohe Bytes, dazu ein kleines Kennzeichen, ob diese Bytes UTF-8 sind. Die Daten im Inneren der Dateien sind davon nicht betroffen. Deshalb lassen sich die Dokumente nach dem Entpacken meist problemlos öffnen. Kaputt sind nur die Namen.
Der typische Ablauf sieht so aus: Ein Kollege wählt im Finder einen Ordner aus, klickt auf Komprimieren und schickt Ihnen die entstandene .zip-Datei per E-Mail oder über einen Messenger. Sie öffnen sie im Windows-Explorer, wählen Alle extrahieren, und im neuen Ordner stehen Namen wie diese:
Jürgen_Angebot.xlsxwird zuJu¨rgen_Angebot.xlsxBärbel Schröder.pdfwird zuBa¨rbel Schro¨der.pdfCafé Rechnung.docxwird zuCafe´ Rechnung.docx
Im anderen Fehlerfall sieht es noch unleserlicher aus, etwa Jürgen_Angebot.xlsx oder Café Rechnung.docx.
Das sind zwei verschiedene Probleme, die sich ähnlich sehen:
Falsche Zeichenkodierung (Mojibake). Das Packprogramm hat die Namen als UTF-8 geschrieben, aber das Kennzeichen nicht gesetzt. Der Windows-Entpacker las die Bytes dann mit der alten Standardcodierung des Systems (Windows-1252). Daraus entstehen Ketten aus Großbuchstaben mit Tilde, Caret und anderen Sonderzeichen, die mit dem Originalnamen nichts zu tun haben. Der eigentliche Name ist vollständig vorhanden, er wurde nur falsch dekodiert.
Zerlegter Unicode (NFD). macOS speichert viele Buchstaben mit Umlauten und Akzenten als zwei getrennte Zeichen. Das ü wird zu einem u plus einem kombinierenden Trema, das é zu e plus Akut. Der Name ist technisch korrektes Unicode, und Windows akzeptiert ihn auch. Windows, die meisten Webformulare und viele Server erwarten aber die zusammengesetzte Form (NFC). Deshalb sieht der Name falsch aus, die Explorer-Suche findet ihn nicht, Skripte, die Dateinamen vergleichen, schlagen fehl, und Upload-Formulare lehnen die Datei ab oder legen ein Duplikat an.
Der Unterschied lässt sich in wenigen Sekunden feststellen. Machen Sie das deshalb zuerst.
Schritt 1: Herausfinden, welches Problem vorliegt
Öffnen Sie den entpackten Ordner, oder betrachten Sie die ZIP-Datei im Explorer, ohne sie zu entpacken, und suchen Sie einen kaputten Namen.
- Enthält der Name Zeichen, die in keinem echten Wort vorkommen (
ü,ö,–), liegt die falsche Zeichenkodierung vor. Springen Sie direkt zu Lösung B. - Ist der Name lesbar, aber Umlaute oder Akzente wirken leicht abgesetzt, liegt NFD vor. Zur Bestätigung können Sie diesen Test machen:
- Klicken Sie die Datei mit der rechten Maustaste an und wählen Sie Umbenennen.
- Drücken Sie Ende und danach einmal Rücktaste.
- Verschwindet nur das Trema oder der Akzent, der Buchstabe bleibt aber stehen, ist der Name zerlegt. Bei einem normalen NFC-Namen entfernt die Rücktaste den ganzen Buchstaben, also etwa das vollständige
ü.
Wenn Sie mit PowerShell vertraut sind, zeigt Ihnen dieser Befehl alle betroffenen Dateien direkt an:
Get-ChildItem -Recurse -File | Where-Object {
-not $_.Name.IsNormalized([Text.NormalizationForm]::FormC)
} | Select-Object FullName
Jede Datei, die der Befehl auflistet, liegt in NFD vor.
Ein Hinweis zu ß: Das Zeichen zerfällt in Unicode nicht. Ein Name mit ß ist also nur dann kaputt, wenn daneben Umlaute oder Akzente zerlegt sind oder die Kodierung falsch gelesen wird.
Lösung A: ZIP-Dateinamen durch NFD verstümmelt
Sie haben zwei sinnvolle Möglichkeiten. Die erste funktioniert komplett im Browser und lässt das Archiv ein Archiv bleiben. Die zweite benennt die Dateien nach dem Entpacken um.
Option 1: Namen im ZIP-Archiv im Browser reparieren
Das ist der geringste Aufwand, wenn Sie die ZIP-Datei weitergeben oder unverändert aufbewahren möchten.
- Öffnen Sie das Tool zur Wiederherstellung von ZIP-Dateinamen in Ihrem Browser.
- Ziehen Sie die
.zip-Datei aus Ihrem Ordner „Downloads“ auf die Seite. Archive bis 200 MB werden unterstützt. - Das Tool schreibt die Namen im Archiv von NFD nach NFC um und stellt Ihnen eine korrigierte ZIP-Datei zum Herunterladen bereit.
- Entpacken Sie die neue Datei wie gewohnt mit Alle extrahieren. Namen wie
Jürgen_Angebot.xlsxerscheinen jetzt richtig, und die Explorer-Suche findet sie.
Die Verarbeitung läuft lokal in Ihrem Browser. Das Archiv und seine Namen werden nicht auf einen Server hochgeladen, was wichtig ist, wenn die ZIP-Datei Verträge oder Personalunterlagen enthält. Das Tool ist kostenlos. Wenn Sie die Dateien bereits entpackt haben, können Sie auf derselben Website einzelne Dateien per Drag & Drop hochziehen und gesammelt umbenennen lassen.
Option 2: Nach dem Entpacken mit PowerShell umbenennen
Windows bringt alles mit, was zum Normalisieren der Namen nötig ist. .NET unterstützt die Unicode-Normalisierung seit Jahren. Arbeiten Sie zuerst mit einer Kopie des Ordners, denn der Befehl benennt die Dateien direkt um.
- Entpacken Sie die ZIP-Datei normal.
- Öffnen Sie den entpackten Ordner, klicken Sie in die Adressleiste, tippen Sie
powershellund drücken Sie Enter. Ein PowerShell-Fenster öffnet sich in diesem Ordner. - Fügen Sie den folgenden Befehl ein und drücken Sie Enter:
Get-ChildItem -Recurse -File | ForEach-Object {
$nfc = $_.Name.Normalize([Text.NormalizationForm]::FormC)
if ($nfc -ne $_.Name) {
Rename-Item -LiteralPath $_.FullName -NewName $nfc
}
}
- Wenn auch Ordnernamen betroffen sind, führen Sie den Befehl ein zweites Mal mit
-Directorystatt-Fileaus. Benennen Sie dabei Ordner erst nach den Dateien darin um, sonst ändern sich die Pfade während des Vorgangs.
Das ist ein guter Weg für Einzelfälle und für Entwickler, die den Schritt in ein Build-Skript übernehmen wollen. Der Nachteil: Die ursprüngliche ZIP-Datei bleibt unverändert, und der Befehl ist schnell im falschen Ordner ausgeführt.
Lösung B: ZIP-Dateinamen durch falsche Zeichenkodierung verstümmelt
Wenn Sie Zeichenfolgen wie Müller sehen, hilft Normalisieren nicht. Die Bytes müssen zuerst als UTF-8 gelesen werden.
- Installieren Sie 7-Zip (kostenlos, von 7-zip.org) oder ein anderes Packprogramm eines Drittanbieters. Diese lesen UTF-8-Namen auch dann meist richtig, wenn das Kennzeichen fehlt. Genau daran scheitert der eingebaute Entpacker des Explorers oft.
- Klicken Sie die ZIP-Datei mit der rechten Maustaste an und wählen Sie 7-Zip → Hier entpacken (oder Entpacken nach „Ordnername\“).
- Prüfen Sie die Namen. Sind sie jetzt lesbar, sind Sie fertig.
- Sind die Namen lesbar, aber Umlaute wirken weiterhin zerlegt, lagen beide Probleme gleichzeitig vor. Wenden Sie dann Lösung A auf die entpackten Dateien an.
Liefert auch ein Entpacker von Drittanbietern Unsinn, hat der Absender vermutlich eine alte Zeichenkodierung statt UTF-8 verwendet. Dann ist es am schnellsten, den Absender um eine neue ZIP-Datei zu bitten. Auf dem Mac schreiben der eingebaute Befehl Komprimieren und die meisten gängigen Programme UTF-8. Das Problem entsteht meist durch ein altes oder ungewöhnliches Werkzeug oder dadurch, dass die Datei auf einem Windows-Rechner mit anderer Systemsprache neu gepackt wurde.
Vorbeugen für das nächste Mal
Einige Gewohnheiten vermeiden das Problem auf beiden Seiten.
Wenn Sie vom Mac aus verschicken: Lassen Sie den Ordner vor dem Komprimieren durch ein Normalisierungswerkzeug laufen, damit die Namen schon in NFC vorliegen. Alternativ teilen Sie einen Link aus einem Cloud-Speicher statt einer ZIP-Datei. Die meisten Dienste normalisieren die Namen beim Hochladen, aber nicht alle. Testen Sie das am besten einmal mit einer Testdatei. Für Dateien, die über Webformulare statt als ZIP hochgeladen werden, wandelt die FilenameFixer-Erweiterung für Chrome die Namen beim Hochladen automatisch in NFC um. So lehnt das Formular beim Empfänger eine Datei wie Zoë.xlsx nicht ab, nur weil sie nicht mit dem bereits gespeicherten Namen übereinstimmt.
Wenn Sie unter Windows empfangen: Behalten Sie 7-Zip oder ein ähnliches Programm installiert. Kommt ein Mac-Archiv mit Umlauten oder Akzenten an, machen Sie zuerst den Rücktaste-Test, bevor Sie Dateien von Hand umbenennen. Manuelles Umbenennen ist hier besonders unzuverlässig. In den meisten Schriftarten sehen zerlegte und zusammengesetzte Namen gleich aus, und am Ende haben Sie zwei Dateien, die scheinbar denselben Namen tragen.
Wenn Sie entwickeln: Normalisieren Sie Namen auf NFC an der Grenze Ihrer Anwendung, also im Upload-Handler, im Sync-Skript oder im Build-Schritt. In Python erledigt unicodedata.normalize("NFC", name) das, in Node name.normalize("NFC") und in .NET String.Normalize(). Das ist deutlich günstiger, als später herauszufinden, warum ein Test auf macOS läuft, auf dem Linux-Server aber scheitert, weil zwei scheinbar identische Dateinamen unterschiedliche Bytefolgen haben.
An den Dokumenten selbst ändert sich durch all das nichts, das Risiko für den Inhalt ist also gering. Im schlimmsten Fall müssen Sie die Archivdatei noch einmal entpacken.