• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Anzeige von Umlauten

Hallo,

ich habe ein Problem auf einem Server auf dem ich mittels ssh (bash) zugreife:

locale sind alle auf de_DE.UTF-8 gesetzt. Ich kann Umlaute in der Konsole eingeben, ebenso unter vi. Dateinamen werden auch mit Umlauten gespeichert und angezeigt. Nun habe ich ein Java-Prog. dass mir Dateien anlegt. Wenn ich mir die DIR-List per mail zuschicke, werden alle Dateinamen korrekt angezeigt, ebenso mit dem Client WinSCP. Aber auf der Konsole (ls -l) ist immer ein ? für den Umlaut.
Wenn ich in das Verzeichnis mit dem Umlaut wechseln möchte, kann ich es direkt nicht angeben (auch nicht \?), mit der TAB-Taste wird ein inverses ? angezeigt. Hauptproblem ist, wenn es mehrere Verzeichnisse mit Umlauten gibt, z.B. Ba?burg, Ba?berg, dann gehts ja mit der TAB auch nicht mehr.
Kann da jemand weiterhelfen?

Gruss Oliver
 
A

Anonymous

Gast
Ich glaube hier musst du doch etwas ausführlicher mit den Informationen werden. So sehen wir nicht wo das Problem genau besteht.

Was ist es für ein Filesystemtype ? mit welchen Optionen ist es in Linux gemountet ? ist Windows im Spiel und dann wo und wie ? sehen die Dateien nur über ssh verfäscht aus oder auch bei lokaler Anmeldung ? ist dieses Java das einzige Programm das solche Dateinamen erzeugt?

Solche Probleme hatten wir hier schon in den unterschiedlichsten Fassetten
http://www.linux-club.de/search.php?keywords=umlaute+Dateinamen&terms=all&author=&sc=1&sf=all&sk=t&sd=d&sr=posts&st=0&ch=300&t=0&submit=Suche

für eine regelmäßige oder einmalige reine Konvertierung der Dateinamen gäbe es zB das Programm "convmv"

robi
 
Das filesystem ist ext3. Lokal am Server anmelden geht nicht, nur über thinClient.
Wenn ich mich über den thinClient oder über ssh von einem anderen Linux oder ssh über Putty(Windows) mich anmelde, habe ich ein ?
Wenn ich über einen "Kopier"-Client, z.B. WinSCP (Windows) auf das Verzeichnis des Linuxservers schaue, habe ich kein ?, es werden alle Umlaute korrekt angezeigt.
Da es ja mehrere Server sind, es ist egal ob es sich um SLES9 oder um openSuSE 10.2 handelt.

Wenn ich nun von diesem WinSCP auf das Linux kopiere, sieht man auf dem WinSCP ein ä, auf der konsole ein ?
Wenn das Java-Prog (das auf dem Linuxserver liegt) eine täscht.txt erzeugt, sieht man von Windows aus die täscht.txt, unter Linux t?scht.txt
Wenn ich dann unter Linux den vi mit der Datei aufrufen will, geht das nur indirekt mit "vi t" und dann die TAB-Taste, dann wird allerdings das ? invers dargestellt, aber er öffnet sie

Wenn ich nun unter Linux die Datei täscht.txt erzeuge, wird sie auch so dargestellt
Wenn ich diese Datei dann von Linux zu Linux mit scp kopiere, kommt auch die täscht.txt an

Ich weiß, viele Wenns... :???:
 
Laß mich raten: Du verwendest putty um auf die Kiste zu kommen? Dann mach mal einen Rechtsklick auf die obere rechte Ecke des putty-fensters und wähle "change settings..." Unter "Window" findest Du "Translation" und darin "charakter translation" was bei dir garantiert noch auf "ISO-8858-1" steht. Wähl da mal UTF-8 und alles ist schön
 
Nein, ich verwende primär den Thinclient um mich auf einem Linux anzumelden und von dort aus ssh.

Allerdings habe ich das mit dem putty unter Windows mal ausprobiert (ISO war eingestellt, habe dann vor der Session UTF-8 eingestellt) und es sind immer noch die ? da, aber wie schon bereits erwähnt, unter WinSCP sind die Umlaute sichtbar, ich versuche mal dort irgendwo anzusetzen, sprich Konfig. usw.
 
So, das wird jetzt etwas länger, aber ich versuch mal meine Schritte hier darzulegen:
Von Windows aus:

Rufe WinSCP auf (das ja auf putty aufsetzt), kopiere von Windows nach Linux die Datei täscht.png im binär-Modus:

Code:
Copying 1 files/directories to remote directory "/home/user/test/"
  PrTime: Yes; PrRO: Yes; Rght: rw-r--r--; PrR: No; FnCs: N; RIC: Yes; Resume: S (102400); CalcS: Yes; Mask: *.*
  TM: M; AscM: *.*html; *.htm; *.txt; *.php*; *.cgi; *.c; *.cpp; *.h; *.pas; *.bas; *.tex; *.pl; .htaccess; *.xtml; *.css; *.cfg; *.ini; *.sh; *.xml 
File: "C:\Dokumente und Einstellungen\user\Desktop\testlokal\täscht.png"
Copying "C:\Dokumente und Einstellungen\user\Desktop\testlokal\täscht.png" to remote directory started.
Binary transfer mode selected.

Danach die Datei täscht.txt:
Code:
Copying 1 files/directories to remote directory "/home/user/test/"
  PrTime: Yes; PrRO: Yes; Rght: rw-r--r--; PrR: No; FnCs: N; RIC: Yes; Resume: S (102400); CalcS: Yes; Mask: *.*
  TM: M; AscM: *.*html; *.htm; *.txt; *.php*; *.cgi; *.c; *.cpp; *.h; *.pas; *.bas; *.tex; *.pl; .htaccess; *.xtml; *.css; *.cfg; *.ini; *.sh; *.xml 
File: "C:\Dokumente und Einstellungen\user\Desktop\testlokal\täscht.txt"
Copying "C:\Dokumente und Einstellungen\user\Desktop\testlokal\täscht.txt" to remote directory started.
Ascii transfer mode selected.
Opening remote file.

Dann lege ich unter Linux im selbigen Verzeichnis eine Datei mit dem vi an, die heisst löt.txt

Somit liegen jetzt unter dem Linux /home/user/test -> diese Dateien
täscht.png
täscht.txt
löt.txt
-----------------------------------------
locale unter Linux zeigt das:
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

------------------------------------
Nun die unterschiedlichen Ausgaben:

WinSCP unter Windows:
löt.txt (<- löt.txt)
täscht.png
täscht.txt

putty unter Win:
löt.txt (<- löt.txt)
t?scht.png
t?scht.txt

Linux-console:
löt.txt
t?scht.png
t?scht.txt
--------------------------------------

In der täscht.txt stehen auch Umlaute, die von dem vi fehlerfrei gelesen werden, in der Statuszeile erscheint allerdings:
"t<e4>scht.txt" [konvertiert] 1L, 20C

Zum Vergleich die lokal angelegte löt.txt:
"löt.txt" 1L, 2C
 
A

Anonymous

Gast
Deine Windowsrechner sprechen scheinbar ISO-8859-1 und deine Linuxrechner de_DE.UTF-8
Schreibt jetzt Windows dann auch in dieser Sprache also ISO-8859-1 und wird das gelesene auch nach dieser Sprache deuten und es wieder richtig anzeigen.
Ließt das Linux dann will er es mit einer anderen Spache deuten und da kommen die ? her, weil er das so nicht versteht.

Entweder du bringst Windows bei UTF8 zu sprechen, am besten vergiss das gleich wieder.
Oder du bringst allen LINUX-Rechner bei 8859-1 zu sprechen, ist aber genauso Quatsch.

Also müsstest du dich wenn du Windowssachen unter LINUX auslesen willst die Sprache ändern. Dann hättest du aber Probleme dann die Sonderzeichen zu lesen die Linux selbst geschrieben hat. Sprache wechseln entweder bei der Anmeldung gleich im Client, also zB putty, oder dann auf Linuxseite beim Anmelden mit ~/.ssh/environment

Einfach geht es aber auch mal schnell auf der Shell zu wechseln, das wird in Scripten und auch sonst in den meisten Fällen ausreichen.
hier mal ein kleiner Konsollog der das Problem hoffentlich einigermaßen verdeutlichen kann:
Code:
rob@priv0001:/tmp> LANG="ISO-8859-1"
rob@priv0001:/tmp> touch müll
rob@priv0001:/tmp> ls -l müll
-rw-r--r-- 1 rob users 0 Dec  2 19:22 m??ll
rob@priv0001:/tmp> LANG="de_DE.UTF-8"
rob@priv0001:/tmp> ls -l müll
-rw-r--r-- 1 rob users 0  2. Dez 19:22 müll

robi
 
Hmm, das macht zwar Sinn, ändert aber leider nichts, vielleicht liegt es ja daran, dass diese Dateien schon existieren:

Code:
user@host:/test>ls -l
-rw-r--r--   1 user users    389 2. Dez 18:48 B?ckeburg

user@host:/test>LANG=ISO-8859-1
user@host:/test>ls -l
-rw-r--r--   1 user users    389 2. Dez 18:48 B?ckeburg
Auch wenn ich den Zeichensatz ändere, tut sich nichts. Nur wenn ich den Befehl in das .profile reinschreibe und starte, ändert sich das ? in ein inverses, aber sonst nüd.
 
Oben