Der Martin: Umlaute in Dateinamen

Beitrag lesen

Hallo,

  • Was macht TCPDF mit dem übergebenen String, d.h. wie heißt die Datei nachher auf der Platte?
  • Was macht der Webserver, wenn er die URL M%C3%BCller_300522.pdf auf's Dateisystem mappen soll?

und

  • transformiert oder interpretiert das Filesystem auch noch irgendwas?

Wenn der Browser das PDF abholen soll, muss das ü auf jeden Fall URL-codiert sein. Ob es richtig ist, es UTF-8 zu codieren, ist aber eine andere Frage - das hängt dann davon ab, ob der Dateiname UTF-8 codiert im Dateisystem des Servers abgelegt wurde.

Korrekt.

Ich glaube, dass hier massive Systeminkompatibilitäten (Server-Betriebssystem, Server-Filesystem, Webserver-Software) lauern können.

Ja, wobei gerade das Filesystem interessant ist.

Unix/Linux-Filesysteme sind da phlegmatisch. Sie übernehmen einfach die Byte-Sequenz, die die Anwendung übergibt, und fragen nicht nach der Zeichencodierung. Die Shell allerdings schon, die geht von der im eingestellten locale festgelegten Zeichencodierung aus.

Zeitgemäße Windows-Filesysteme (also NTFS) speichern Dateinamen in UCS-2, eine Untermenge von UTF-16. Das Filesystem-API gibt's doppelt - einmal für Strings in einer 8bit-Codierung (typischerweise Windows-1252, kann aber je nach lokalisierter Version auch was anderes sein), einmal für Strings in UCS-2.
Wir wissen weder, welches der beiden APIs eine Anwendung (Webserver) verwendet, noch welche Codierung tatsächlich bei der 8bit-Variante zum Einsatz kommt. Es ist also ein Lottospiel.

Ältere Windows-Filesysteme, also FAT (FAT12, FAT16, FAT32) speichern Dateinamen nur in einer 8bit-Codierung. Das dürfte aber heute höchstens noch auf externen Datenträgern zum Einsatz kommen (Speicherkarten von Digitalkameras oder Handies; externe Festplatten, die auf höchstmögliche Kompatibilität formatiert sind; USB-Sticks, die "überall" funktionieren müssen).

Hier, bei mir, im Edge-Browser unter Windows 10 gegen einen IIS Webserver, der auf dem gleichen Windows 10 mit NTFS läuft, kann ich eine Datei Müller.txt unter den Namen Müller.txt, M%FCller.txt und M%C3%BCller.txt abrufen.

Das hätte ich nicht erwartet.

Irgendwie errät er das.

Ja, it's magic.

Ob das mit einem Safari auf einen iPhone, der mit einem Apache unter Hinz-Linuchs mit Kunz-FS 47.11 läuft, das gleiche Verhalten zeigt - tjaaaaa.

Es ist inzwischen gängige Praxis, dass nicht-ASCII-Zeichen in URLs in UTF-8 codiert werden. Normativ festgeschrieben ist das meines Wissens nicht.

Einen schönen Tag noch
 Martin

--
Was ist der schnellste Weg von einem Suchtreffer zum nächsten?
Ein Googlehupf.