Java Umlaute ersetzen Scanner?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Sofern du Umlaute verwendest, wäre es vielleicht besser ein anderes Encoding beim Lesen der Daten zu verwenden:

Scanner s = new Scanner(System.in, "ISO-8859-1");

sako14 
Beitragsersteller
 22.09.2016, 12:51

Vielen Dank! Eigentlich könnte ich auch nur Scanner s = new Scanner(System.in); machen oder ?

0
sako14 
Beitragsersteller
 22.09.2016, 12:57
@DarkxAxngel

Ja hab ich ja schon probiert, klappt auch ^^ Nur wollte ich wissen für was man dieses Encoding braucht, weil in der Schule wurde uns das nicht erklärt.

0
KnusperPudding  22.09.2016, 13:16
@sako14

 Eigentlich könnte ich auch nur Scanner s = new Scanner(System.in); machen oder ?

In dem Falle wird da Standard-Charset verwendet, was nicht immer dasselbe sein muss je nach JavaVM und Rechner.

Explizit das Encoding anzugeben, halte ich durchaus für wichtig.

Ich persönlich hatte erst den Fall, dass ich deshalb einen Fehler auf Rechner B hatte, den ich auf Rechner A nicht nachvollziehen konnte, bis ich durch Zufall auf das Charset stieß.

0
KnusperPudding  22.09.2016, 13:30
@sako14

Beim Encoding geht es darum, wie die erhaltenen Bytes interpretiert werden um daraus Lesbare Zeichen zu machen.

Dabei ist "kurz gesagt" Das ISO-8859-1" Encoding das "ältere". Dass eigentlich weniger Zeichen kennt als UTF-8.

Das Problem, was du hast: Die Konsole auf der du das eingibst ist mit ISO-8859-I kodiert. Wenn du diese aber nun mit UTF-8 liest, gibt es an einigen Stellen eben Differenzen, wie bei den Umlauten.

0

Vielleicht ist deine .java ja nicht UTF-8 sondern ANSI mit Umlauten? Versuch doch mal die \uHEX0 Kombinationen statt den reinen Zeichen. Du könntest du einfach eine Bestätigung zu haben dir ja auch mal die Charcodes ausgeben lassen ((int)DeinString.charAt(index))


KnusperPudding  22.09.2016, 13:13

Nur wenn der Scanner bereits die Zeichen beim lesen 'nicht versteht', wird es zu einem Problem...

Da mit UTF-8 gelesen wird, ist die Information bereits vor der 'Weiterverarbeitung' verloren, denn die Umlaute werden durch ein kryptisches Zeichen ersetzt, aus dem kein \uHEX mehr lesbar ist.

0
Gastnr007  22.09.2016, 15:52
@KnusperPudding

UTF-8 kann deutlich mehr Informationen halten als ISO-8859-1, da sollte nichts verloren gehen. (nein, es ist nicht auf 8Bits begrenzt, UTF-16 ist auf 16Bits begrenzt, aber UTF-8 geht bis 8Bytes mit dann 42Bits)

0