ritschmanhard: Perl, Linux, Umlautdarstellung in system call

Beitrag lesen

Hi!

Ich werde (trotz google) derzeit nicht so recht schlau, was ich machen muß, damit Umlaute und ß korrekt nach systemcall dargestellt werden.

Hintergrund: ich habe eine (interne) Verwaltungsroutine, die mir ein Listing ähnlich z.B. dem Explorer unter Windows auf den Browser exportiert.
Hierfür verwende ich (vereinfacht) in Perl:

$myDir = sudo find '/meinverzeichnispfad' -maxdepth 1;

Dieses liefert mir auch wunderbar alle Dirs und Files - allerdings werden Umlaute falsch umgesetzt (Bsp. ü ist dann ü).

Folgendes habe ich (erfolglos) probiert (und diverse Kombinationen):
1)**************
$myDir = export LC\_TYPE="de\_DE.UTF8"; sudo find '/meinverzeichnispfad' -maxdepth 1;
2)**************
POSIX:setlocale(LC_TYPE,"de_DE.UTF8")
$myDir = sudo find '/meinverzeichnispfad' -maxdepth 1;
3)**************
system("export LC_TYPE="de_DE.UTF8"");
$myDir = sudo find '/meinverzeichnispfad' -maxdepth 1;

Meine Ausgaben auf Konsole sagen für locale:
sowohl als root als auch scriptuser:
LANG=
LC_TYPE="de_DE.UTF8"
LC_NUMERIC="POSIX"
...
LC_IDENTIFICATION="POSIX"
LC_ALL=

Mein Script meldet stets:
system("locale > /test.txt");
test.txt:
LANG=
LC_TYPE="POSIX"
LC_NUMERIC="POSIX"
...
LC_IDENTIFICATION="POSIX"
LC_ALL=

Einzige Möglichkeit, dies zu ändern war, in einer Zeile zu schreiben:
system("export LC_TYPE="de_DE.UTF8"; locale > /test.txt");
test.txt
LANG=
LC_TYPE="de_DE.UTF8"
LC_NUMERIC="POSIX"
...
LC_IDENTIFICATION="POSIX"
LC_ALL=

Interessanterweise habe ich festgestellt, dass das find Kommando (ausgeführt als webuser) auf _Konsole_ die Umlaute richtig darstellt.
Weiterhin habe ich durch Umleitung im Skript festgestellt (sudo find '/meinverzeichnispfad > /test.txt), dass die Fehlkodierung dann auch in test.txt zu finden ist.

Wie krieg ich das hin, dass der Aufruf mir korrekt kodierte Umlaute liefert?

Grüße,
Richard