Vault-Import: Umlaute in Seitentiteln zerstört (ZIP-Dateinamen-Dekodierung) #127
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#127
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bug (Stefans echter Vault-Import auf Prod)
Beispiel: „Wenn der Fußball zum Götzen wird" → Titel mit kaputten Sonderzeichen, Slug
fussball-wm-2026-wenn-der-fua-ball-zum-goi-tzen-wird.Das Muster (
ß→ua,ö→oi) zeigt auf falsch dekodierte ZIP-Dateinamen: UTF-8-Bytes (macOS zudem NFD-zerlegt) wurden als Latin-1/CP437 interpretiert — der Unzip-Pfad honoriert offenbar nur das UTF-8-Flag im ZIP-Header, das nicht jedes Tool setzt. Seitentitel entstehen aus den Dateinamen, daher landet der Mojibake im Titel; der Slug macht darausfua/goi.Fix: Dateinamen beim Entpacken immer als UTF-8 dekodieren (Fallback nur, wenn ungültig) und anschließend NFC-normalisieren (macOS-ZIPs liefern NFD — sonst matchen Wikilinks/Duplikat-Erkennung nicht). Fixture um einen Umlaut-Dateinamen OHNE UTF-8-Flag erweitern, Unit-Test pinnen.
Hinweis: bereits importierte Seiten (Prod, Teich stefan-waidele) behalten die kaputten Titel — nach dem Fix Teilbaum löschen und neu importieren (oder Titel per Hand/API korrigieren).
Erledigt in
78a913c.Root Cause bestätigt: fflate dekodiert ZIP-Eintragsnamen ohne UTF-8-Flag (Bit 11) als Latin-1 — gängige Archiver setzen das Flag nicht, also kamen die UTF-8-Bytes von „Fußball"/„Götzen" als Mojibake an und landeten als Seitentitel (Slug
fua-ball/goi-tzen).Fix: Die Latin-1-Dekodierung ist byte-verlustfrei, deshalb liest
parseVaultZipNamen, deren Zeichen alle in ein Byte passen, strikt als UTF-8 nach (echtes Latin-1 und flag-dekodierte Namen fallen unverändert zurück) und NFC-normalisiert anschließend — macOS-ZIPs liefern zerlegte Umlaute (NFD), was zusätzlich slugifys ä→ae-Digraphen, Wikilink-Matching und Duplikat-Erkennung brach.slugifyselbst normalisiert jetzt ebenfalls vorab (Defense-in-depth für NFD aus anderen Quellen).Unit-Tests pinnen beide Fälle (handgepatchtes ZIP ohne UTF-8-Flag; NFD-Name → präkomponierter Titel +
ueber--Slug). CI grün auf1b9dd7d.Hinweis für deinen Prod-Teich: bereits importierte Seiten behalten die kaputten Titel — nach dem Deploy den importierten Teilbaum löschen und neu importieren (oder Titel von Hand korrigieren).