inputStreamReader und deutsche Sonderzeichen

  • Ich hab da ein kleines Problem mit dem Einlesen von Text über die Standardeingabe:

    Code
    ...
    BufferedReader input=new BufferedReader(new InputStreamReader(System.in, "ISO-8859-1"));
    System.out.println(input.readLine());
    ...

    Dieses Codestück soll nichts anderes machen als einen Text einlesen und diesen anschließend ausgeben. Einziges Problem: die deutschen Sonderzeichen. Abhängig vom gewählten Zeichensatz erhalte ich entweder lauter Fragezeichen (ISO-8859-1) oder ä, ö, Ä, Ö, Ü, ß korrekt, jedoch für ü ein Fragezeichen (windows-1252). Welchen Zeichensatz muss ich wählen bzw. was muss ich sonst machen, damit das korrekt funktioniert???

  • das hängt vom gewählten encoding deines terminals ab...

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Es ist zwar schon sehr lange her, dass dieses Thema aktuell war, aber da es ziemlich gut zu meinem Problem passt und leider nie eine Antwort gefunden wurde, erlaube ich mir ein re-opening, um anderen, die auch so hängen wie ich, die Suche zu erleichtern :)

    Mein Problem konkret:

    Code
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                String tracks_pure = in.readLine();

    Diese einfachen Zeilen sollen mir die Magnetstreifen einer Kreditkarte einlesen, der Input dazu kommt von einer Cherry-Tastatur mit Magnetstreifenleser.
    Das Problem: die einzelnen Tracks sind durch 'ü' s getrennt....und ich brauche die Anzahl der ü's für mein Programm.
    Unter Linux funzt alles einwandfrei, sowohl in Eclipse als auch der Konsole werden die ü's gezählt, unter Windows aber läuft das Programm nur unter Eclipse einwandfrei, die Windowskonsole kennt keine ü's ....ich hab locker schon 2 Tage lang gegoogelt und seltsamerweise funktioniert nichtmal die java-insel Anleitung von hier: http://www.galileocomputing.de/openbook/javai…4261289b3b74cc0

    Wie ich das Encoding meines Terminals einstelle, wüsst ich aber unter Windows nicht.... (und es soll ja nicht nur die Anzeige passen, sondern vor allem das, was im Hintergrund gelesen wird!)

    Ich bin für jede Hilfe dankbar, ich hab schon so ziemlich jeden Anleitungsversuch, den ich ergoogelt hab ausprobiert, aber nichts hilft....im allgemeinen kommt mir das Thema sehr ungenügend beantwortet vor....aber viellleicht hat ja doch schon jemand den Durchbruch geschafft :)

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • Was ist denn der Zeichencode der statt der ü-s auftretenden Zeichen? Kannst du das ermitteln und mit diesem Wissen dann den String zerlegen?

  • statt dem ü tritt ein ³ auf....ich muss aber zugeben, dass ich bei den ganzen problemlösungen diese noch immer nicht ausprobiert habe...grmbl....
    allerdings wird der string mit einem ü eingelesen und über das stdin auf der konsole auch so ausgegeben, deshalb könnte ich mir vorstellen, dass das niciht unbedingt hinhauen wird.....
    aber ich werds doch noch endlich ausprobieren und dann bescheid geben :)

    (danke, irgendwie übersieht man manchmal vor verbissenem suchen die einfachen lösungswege.....)

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • Diese Lösung funktioniert leider nicht :(
    Bezüglich "Kannst du das ermitteln": ich hab jetzt einfach jenes Zeichen genommen, das ich bei vom Programm auf der Konsole ausgegebenen Zeichen sehe, da stand z.B. statt "für" "f³r" ....

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • Ich nehm mal an, das ³ in der Konsole ist ungleich dem ³ in Eclipse.

    Ist input deine Eingabe und a der Index, an dem sich das schadhafte Zeichen befindet, so bekommst du mit

    Code
    int code=input.charAt(a);


    den Zeichencode dieses Zeichens. Diesen Zeichencode kannst du, anders als das ³ oder das ü, problemlos im Programm hardcoden.

    Mit

    Code
    input.indexOf(code);

    solltest du dann den Index des ersten Vorkommens des gesuchten Zeichens in der Eingabe finden können.

    Mag zwar vielleicht eine etwas dreckige Lösung sein, sollt aber meiner Meinung nach funktionieren.

  • nachdem ich jetzt wieder einen tag rumgeschissen habe, weil ich dachte, so gehts auch nicht, bin ich grad im halbschlaftaumel draufgekommen, dass ich ständig nach

    Code
    int code = input.charAt(1);

    gesucht hab, obwohl meine ü's ja an erster Stelle stehen....wie einen solche kleinigkeiten zeit rauben können, argl....

    aber, nichtsdestotrotz: es funktioniert :) vielen dank für diese idee! :thumb:
    so dreckig find ich sie gar nicht, hauptsache es läuft!

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!