Der Martin: Javascript Ajax Upload Sonderzeichen

Beitrag lesen

Hallo,

Solltest Du unter Windows testen, könnte es einen Sinn haben, den Dateinamen (aber nur diesen!!) von UTF8 nach ISO-8859-1 zu konvertieren, da Windows meines Wissens in seinem Dateisystem UTF8 nicht unterstützt.

unter Windows ist das tatsächlich etwas kompliziert.

Windows hat vieles von DOS geerbt, unter anderem das Dateisystem. In Windows-Versionen seit 4.0 gibt es alle API-Funktionen, die mit Dateinamen umgehen, in zwei Ausführungen: Einmal die traditionelle, die eine Ein-Byte-Codierung verwendet (z.B. Windows-1252, in Windows selbst meist oberflächlich ANSI genannt), und dann die moderne, die von UCS-2 ausgeht (eine Untermenge von UTF-16).
Auf dem Datenträger selbst werden Dateinamen generell in UCS-2 gespeichert, wenn man mal davon absieht, dass je nach Systemeinstellung der Abwärtskompatibilität wegen immer noch zusätzlich ASCII-codierte Kurznamen im 8.3-Format erzeugt werden.

Diese Weisheit nützt einem als PHP-Programmierer aber nichts, weil PHP unter Windows noch die alten Dateisystemfunktionen verwendet. Überall da, wo man in PHP Dateinamen an eine Betriebssystemfunktion übergibt, z.B. fopen(), müssen diese also Windows-1252 oder einer vergleichbaren ISO-8859-x-Codierung vorliegen.

UTF-8 wird vom Windows-API gar nicht unterstützt. Egal ob man die Dateisystemfunktionen nach altem oder neuem Strickmuster verwendet - übergibt man in UTF-8 codierte Namen an Windows, kommt Unsinn dabei raus. Bei den neuen auf UCS-2 ausgelegten Funktionen generell, bei den alten nur, wenn Zeichen mit Codes oberhalb von 0x80 auftreten. Umlaute werden dann plötzlich als Doppelzeichen dargesetellt, wie es hier wohl alle kennen, wenn ein UTF-8-Dokument fälschlicherweise als ISO-8859-x interpretiert wird.

Das nur als Ergänzung ...

So long,
 Martin