Zeichensatz-(De)Kodierung

  • Moinsens!

    Ich bin vor ein paar Tagen über ein Problem gestolpert, bei dem ich nicht so recht weiter weiß: Es geht um ein (etwas umfangreicheres, mehrere Klassen) PHP-Script, das schon seit einiger Zeit klaglos läuft, aber jetzt bei einer Transformation Ärger macht. Mal zuerst die Basics:

    a) Da ist ein Windows-10-Server 192.168.1.20 mit Apache 192.168.2.1, PHP und MySQL. Daran angeschlossen ist u.a. eine externe USB-Festplatte, die im intranet als "video1" freigegeben ist. Windows-Clients haben diese i.a. als V: verbunden, am RasPi hängt die unter /mnt/video1.

    b) Dann ist da noch ein (einer von mehreren) RasPi2 192.168.1.50 (LAN) / .51 (WLAN) mit ebenfalls Apache, PHP und MySql. Der läuft headless, kann aber in der Konfigurations-Phase über Dongle mit Maus und Tastatur versehen und an einem alten TFT angeschlossen werden.

    Auf dem Windows-Apache läuft ein Script, das die HDD nach bestimmten Files scannt und aus dem Dateinamen Meta-Informationen herausliest. Diese werden dann in einem Frameset dargestellt. Soweit so gut...

    Jetzt wollte ich diesen Job, wie einige andere auch, mal auf einen der RasPi umstellen, den ich direkt an die Fritz!Box hängen möchte. Die Platte kann (vorerst) auch gerne am Windows-Rechner bleiben. Vielleicht häng ich sie später auch direkt an den RasPi.

    Jetzt stellt sich aber das Problem, daß Umlaute in den Dateinamen, die vorher vom Windows-Server korrekt dargestellt wurden, am RasPi plötzlich murksig aussehen. Mit einem kleinen Test-Script habe ich das nachvollzogen. Am Windows-Rechner werden die Dateinamen mittels utf8_encode umgewandelt und daraufhin korrekt angezeigt. Laß ich das weg, erscheinen schwarze Rauten mit einem ? drin. Am RasPi aber genau umgekehrt: Mittels utf8_encode erhalte ich Murks-Zeichen (großes A mit Tilde drüber usw.), während die Dateinamen unverändert korrekt dargestellt werden. Und da frag ich mich doch so: Warum?

    index.php - Anpassung Windows / RasPi nur an Zeile mit "$directory = ..."

    Und falls noch jemand in die metatags.txt sehen möchte:

  • Windows und NTFS schreiben Dateinamen in UTF16 oder einem ISO-Code, aber nie in UTF8.

    Wenn Linux/Unix auch die Windows Sonderzeichen von Dateinamen "richtig", also in UTF8 behandeln und anzeigen soll, musst Du das beim Mounten mit der Zeichenumwandlungsoption bekanntgeben.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Wenn Linux/Unix auch die Windows Sonderzeichen von Dateinamen "richtig", also in UTF8 behandeln und anzeigen soll, musst Du das beim Mounten mit der Zeichenumwandlungsoption bekanntgeben.

    Wann wo wie genau? Wie gesagt: Die Platte hängt an einem Windows-Rechner und wird über's Netz gemounted.
    Es hängt keine von Windows beschriebene Platte direkt am RasPi.

    Und ein "ls -la" auf das Mount erzeugt korrekte Darstellung, siehe Screenshot. Erst, wenn ich das Verzeichnis per PHP einlese und über Apache an den Client ausgebe, wird's Murks.

    Nochmal: Windows Apache braucht das utf8_encode der (eigenen) Dateinamen, sonst kommt Murks raus. Der RasPi wiederum reagiert allergisch darauf und produziert den Murks durch ebendieses encode. Bei der Übertragung vom Windows-Server auf den RasPi-Server aber alle Scripte anzupassen, ist nicht unbedingt ein gangbarer Weg. Ich würde lieber die Rahmenbedingungen so anpassen, daß die Scripte sich auf beiden gleich verhalten.

    Gruß, Michael

  • Bei einem NTFS Mount wären die Optionen iocharset,nls,utf8

    Bei einem CIFS Mount allenfalls iocharset, mapchars/nomapchars, nounix

    Näheres dazu u.A. auf https://wiki.ubuntuusers.de/Samba_Client_cifs/

    bzw. die Manpages auf Deinem Pi.

    Wenn aber die Filenamen richtig angezeigt werden, dann funktioniert die Filenamenconvertierung auf UTF8 am Mountpoint bereits richtig. Dann ist der Fehler eher im PHP zu suchen. Konfigurierung oder Code. Zeile 48 wäre z.B. ziemlich sinnbefreit, wenn der Filename schon als UTF8 vorliegt, aber in PHP kenne ich mich nicht aus.

    Servus !

    RTFM = Read The Factory Manual, oder so

    • Offizieller Beitrag

    Zeile 48 wäre z.B. ziemlich sinnbefreit, wenn der Filename schon als UTF8 vorliegt

    Sehe ich auch so, deshalb wäre

    und wie ist es mit utf8_decode pauschal darüber laufen lassen?

    einen Versuch wert um alle Dateinamen ohne UTF8 zu haben.

  • Wenn ich mir die beiden Bilder in #1 nochmals ansehe, funktioniert ohne UTF8 Umwandlung bereits die Ausgabe am Pi richtig, weil die aktuelle CIFS Version das bereits (automatisch) erledigt.

    Auch bei älteren SAMBA/CIFS Versionen fiel das Zeichensatzproblem der Dateinamen erst auf, wenn Zeichen ausserhalb der druckbaren ASCII Zeichen in Filenamen verwendet wurden.


    Servus !

    RTFM = Read The Factory Manual, oder so

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!