Jörg Peschke: Zeichen-Kodierung von Verzeichnissen

Hallo,
Ich komm hier an einer Stelle mit Umlaut-Kodierung nicht weiter, vielleicht kann mir jemand helfen:

Folgendes Szenario:

1.) Linux-SAMBA-Fileserver, benutzt offenbar keine spezielle Kodierung von Umlauten (locale zeigt überall POSIX an), ein "ls" auf Dateien mit Umlauten gibt Zeichensalat.

2.) Zugriff über Windows (per SAMBA) zeigt Dateien aber richtig an (mit Umlauten)

3.) Auf diesem Server soll eine Java-Webserver-Anwendung laufen, die Verzeichnisse einliest.

Problem: Das Teil gibt nur Zeichensalat aus. Mein (erfolgloser) Versuch, den Dateinamen und Pfad umzukonvertieren wie folgt:

  
String toUTF8 = "";  
Charset charset = Charset.forName("ISO-8859-1");  
CharsetDecoder decoder = charset.newDecoder();  
try {  
  byte [] baseString = new String(dateiname).getBytes("ISO-8859-1");  
  
ByteBuffer bbuf = ByteBuffer.wrap(baseString);  
CharBuffer cbuf = decoder.decode(bbuf);  
toUTF8 = cbuf.toString();  
} catch (CharacterCodingException e) {  
   throw new Exception ("Kann Zeichensatz nicht konvertieren: "+e.getMessage());  
}  

4.) Auch CP152 anstelle von ISO-8859-1 führt zu keinem Erfolg

5.) Auf einem Windows-System macht die Java-Anwendung alles genau wie sie soll.

6.) Umstellen des Zeichensatzes auf dem Fileserver würde ich nur ungern machen, da ich nicht weiss, auf was das alles Auswirkungen hat.

any Ideas?

Danke schonmal,

Joerg

  1. echo $begrüßung;

    Auch wenn ich sicher keine Java-Lösung bieten kann, ...

    [...] Dateien mit Umlauten gibt Zeichensalat.
    [...] Das Teil gibt nur Zeichensalat aus. [...]
    any Ideas?

    ... definiere bitte "Zeichensalat". Aus dem was angezeigt wird, kann man oftmals Rückschlüsse ziehen, welche Kodierung vorliegen könnte und welche stattdessen beim Leseversuch verwendet worden sein könnte.

    Allgemein kann man versuchen, sich die Byte-Werte der Zeichen anzusehen, und sie mit den Werten der Kodierungstabellen der in Frage kommenden Kodierungen (hierzulande meist ISO 8859-1, Windows 1252 und UTF-8) zu vergleichen, um somit die verwendete Kodierung zu erraten.

    echo "$verabschiedung $name";

    1. Hallo,

      ... definiere bitte "Zeichensalat". Aus dem was angezeigt wird, kann man oftmals Rückschlüsse ziehen, welche Kodierung vorliegen könnte und welche stattdessen beim Leseversuch verwendet worden sein könnte.

      Ok, also:

      Windows-Share (korrekter dateiname)

      ÖÖÖÖ.jpg

      Linux: ls

      ????????.jpg

      Linux: ls --show-control-chars

      ÃÃÃÃ.jpg

      Im Browser (mittels JSP, als charset=ISO-8859-1)

      ????????.jpg

      Kannst Du daran irgendwas erkennen?

      Danke schonmal,
      Jörg

      1. echo $begrüßung;

        Windows-Share (korrekter dateiname)

        ÖÖÖÖ.jpg

        Linux: ls

        ????????.jpg

        Mich irritiert, dass es 8 Fragezeichen sind. Sonst hätte ich auf ISO 8859-x-Zeichen getippt, die mit UTF-8 zu lesen versucht wurden. Eine Byte-Sequenz eines UTF-8-Zeichen muss einer bestimmten Regel folgen, die im Allgemeinen von sinnvoll aneinander gereihten ISO 8859-1-Zeichen nicht eingehalten wird. Das Resultat wäre dann ein Fragezeichen pro Zeichen.

        Linux: ls --show-control-chars

        ÃÃÃÃ.jpg

        Das sieht so aus, wie ein UTF-8-kodiertes Ö das mit ISO 8859-1 zu lesen versucht wurde. Ein Ö besteht aus den Bytes (hex) C3 und 96. C3 wird zu Ã, die 96 ist ein nicht darstellbares Steuerzeichen. Unter Windows-1252 wäre es statt dessen ein –

        Im Browser (mittels JSP, als charset=ISO-8859-1)

        ????????.jpg

        siehe oben.

        echo "$verabschiedung $name";