# Eclipse Umlaute



## Sven003 (23. Mai 2022)

Hallo,

ich habe vor kurzem mit dem Programmieren angefangen und daher noch ganz am Anfang.
Ein Problem treibt mich jedoch derzeit in die Verzweiflung.

Windows 10,
JRE: JavaSE-17
jdk-18.0.1.1

Ich benutze momentan Eclipse und scheitere daran, Umlaute in der Consolenausgabe darzustellen.
Der Fehler lässt ganz leicht darstellen.


```
public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println("öäü€");
    }

}
```

In der Ausgabe erscheint dann nur ����.

Wenn ich eine Klasse erstelle mit Umlaut, funktioniert die Klasse nicht mehr.


```
public class Testä {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}
```

Fehlermeldung: 
Fehler: Hauptklasse Testä konnte nicht gefunden oder geladen werden
Ursache: java.lang.ClassNotFoundException: Testä

Ich habe schon sehr viel gegoogelt und auch ausprobiert.

Bisherige Lösungsversuche:

1. Window - General - Workspace - UTF-8
2. Window - General - Appearance - Content Types auf UTF - 8 umgestellt.
3. Run Configurations - Common - UTF-8
4. Edit - Set Encoding - UTF-8
5. Unicode ausprobiert, z.b. (\u00c4). Konnte auch nicht dargestellt werden.
6. im Explorer Ordner die .java Datei mit Notepad++ kontrolliert (UTF - 8)
7. Die von Eclipse erzeugte Datei.java über CMD kompiliert und dann mit der Console ausgegeben. Dort wurde alles richtig dargestellt.
8. Über CMD die von Eclipse erzeugte .class Datei ausgegeben. Auch dort wurde alles richtig dargestellt.
9. In Windows das Gebietsschema auf Beta UTF-8 eingestellt).

Meine Vermutung ist, dass bei dem Schritt, wenn Eclipse die Class Datei ausführen möchte, ein Fehler auftritt.
Für den Bereich finde ich aber leider keine speziellen Informationen mehr für dieses Problem.


----------



## TomTank (23. Mai 2022)

Sven003 hat gesagt.:


> Hallo,
> 
> ich habe vor kurzem mit dem Programmieren angefangen und daher noch ganz am Anfang.
> Ein Problem treibt mich jedoch derzeit in die Verzweiflung.
> ...


Das ist korrekt. Denn Bezeichner (Klassennamen, Variablennamen, Funktionsnamen) dürfen nur aus _[0-9][a-z][A-Z] bestehen. "Testä" ist somit kein korrekter Name



			Chapter 18. Syntax
		


und es darf natürlich kein alleinstehendes Schlüsselwort sein z.B. "class", "private", "int", etc. Betonung liegt hierbei auf alleinstehend.

Hier ein paar Beispiele:

MyClass => korrekt
class => falsch, da alleinstehend
_class => korrekt, da nicht alleinstehend
Class2 => korrekt, da nicht alleinstehend
Testä => falsch, da nicht im erlaubten Zeichensatz


----------



## Sven003 (23. Mai 2022)

Danke für die Antwort.
Dann ist das mit der Klasse ein selbstgemachtes Problem.
Wundert mich gerade nur, hatte im Video gesehen, dass der Dozent (Onlinetutorial) eine Klasse mit einem Umlaut geschrieben hat.


```
public class SchlüsselwortIf
```

In Strings sind die Umlaute soviel ich weiß aber erlaubt.
Zum lernen vermeide ich momentan die Umlaute, weil ich das Problem nicht gelöst bekomme.
Schwierig wird das aber dann, wenn man z.b. über den Scanner Strings einliest (z.b. Nachname Müller).


----------



## yfons123 (23. Mai 2022)

> The "Java letters" include uppercase and lowercase ASCII Latin               letters A-Z (\u0041-\u005a),               and a-z (\u0061-\u007a), and,               for historical reasons





			Chapter 3. Lexical Structure
		


es hat nichts mit dem zeichensatz beim kompilieren zu tun dass es nicht kompiliert
java hat zeichen die benutzt werden dürfen und bei identifier  dürfen nur die zitierten ( und $ weil keine ahnung ) hergenommen werden


----------



## Oneixee5 (23. Mai 2022)

Umlaute sind kein Problem für Java und Eclipse. Es ist eher ein "soll nicht" statt "darf nicht" für die Verwendung von Umlauten. Die Probleme sind eher bei der internationalen Weitergabe solcher Programme.


----------



## TomTank (23. Mai 2022)

Sven003 hat gesagt.:


> Danke für die Antwort.
> Dann ist das mit der Klasse ein selbstgemachtes Problem.
> Wundert mich gerade nur, hatte im Video gesehen, dass der Dozent (Onlinetutorial) eine Klasse mit einem Umlaut geschrieben hat.
> 
> ...


Also ich lass mich gern eines besseren belehren, mir persönlich ist aber keine Programmiersprache bekannt, die als Identifier Umlaute erlauben


Sven003 hat gesagt.:


> In Strings sind die Umlaute soviel ich weiß aber erlaubt.


In Strings sind alle Zeichen erlaubt. Bei einigen Zeichen musst du aber aufpassen. z.B.

" Auf "a" und "b" folgt "c" " (falsch),
da nicht dazwischen unterscheiden werden kann wo denn dein String anfängt oder aufhört.

" Auf \"a\" und \"b\" folgt \"c\" " (korrekt) oder alternativ
' Auf "a" und "b" folgt "c" ' (korrekt mit Singelquote)


Sven003 hat gesagt.:


> Zum lernen vermeide ich momentan die Umlaute, weil ich das Problem nicht gelöst bekomme.


Einfach nur dran denken, das nur die obigen Zeichen für Identifier gilt.


Sven003 hat gesagt.:


> Schwierig wird das aber dann, wenn man z.b. über den Scanner Strings einliest (z.b. Nachname Müller).


Wieso? Eine Textdatei einlesen ist etwas anderes als Umlaute in Identifier zu schreiben.


----------



## Oneixee5 (23. Mai 2022)

TomTank hat gesagt.:


> Also ich lass mich gern eines besseren belehren, mir persönlich ist aber keine Programmiersprache bekannt, die als Identifier Umlaute erlauben



Naja, jetzt kennst du eine.


----------



## LimDul (23. Mai 2022)

Da hilft ein Blick in die JLS:


> Programs are written using the Unicode character set (§1.7). Information about this character set and its associated character encodings may be found at https://www.unicode.org/.
> (...)
> An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter.
> (...)
> Letters and digits may be drawn *from the entire Unicode character set*, which supports most writing scripts in use in the world today, including the large sets for Chinese, Japanese, and Korean. *This allows programmers to use identifiers in their programs that are written in their native languages.*





			Chapter 3. Lexical Structure


----------



## Oneixee5 (23. Mai 2022)

TomTank hat gesagt.:


> ' Auf "a" und "b" folgt "c" ' (korrekt mit Singelquote)


Das ist der größte Blödsinn. Das geht mit JavaScript und hat mit Java nichts zu tun.
Möglich sind single Quotes für den Datentyp Char:

```
char singleCharacter =  'A';
```


----------



## Oneixee5 (23. Mai 2022)

Sven003 hat gesagt.:


> Windows 10,
> JRE: JavaSE-17
> jdk-18.0.1.1


Diese Auflistung irritiert mich etwas. Du benötigst normalerweise kein extra JRE wenn ein JDK installiert ist. Andererseits genügt ein JRE wenn du mit Eclipse entwickelst, da Eclipse einen eigenen Compiler mitbringt. Dann ist das Kompilieren auf der Kommandozeile aber nicht möglich.
Ich würde dir raten ein JDK Version 17 LTS zu installieren. Das ist eine stabile Version mit Langzeitsupport, gibts bei Microsoft als MSI (du nutzt ja Windows) https://docs.microsoft.com/en-us/java/openjdk/download. Zu prüfen wäre auch, ob deine Eclipse-Version überhaupt Java 18 unterstützt, falls du Java 18 nutzen willst.


----------



## Sven003 (23. Mai 2022)

TomTank hat gesagt.:


> Also ich lass mich gern eines besseren belehren, mir persönlich ist aber keine Programmiersprache bekannt, die als Identifier Umlaute erlauben
> 
> In Strings sind alle Zeichen erlaubt. Bei einigen Zeichen musst du aber aufpassen. z.B.
> 
> ...



Mit den Identifier macht Sinn, dass man nur bestimmte Zeichen benutzen darf.
Das wurde im Tutorial auch erwähnt, ist nur bei mir untergegangen.
Das Hauptproblem ist, dass Eclipse  garkeine Umlaute darstellen kann.
Jegliche Umlaute, ob die per Scanner in einen String eingelesen werden oder man direkt eine Ausgabe mit System.out.println() macht, kann Eclipse bei mir nicht darstellen. 
Dann erscheinen nur ���� statt den Umlauten.
Wenn ich das ohne Eclipse mache in einem Wordpad und dann über CMD ausführe, funktioniert alles wunderbar.


----------



## Sven003 (23. Mai 2022)

Oneixee5 hat gesagt.:


> Diese Auflistung irritiert mich etwas. Du benötigst normalerweise kein extra JRE wenn ein JDK installiert ist. Andererseits genügt ein JRE wenn du mit Eclipse entwickelst, da Eclipse einen eigenen Compiler mitbringt. Dann ist das Kompilieren auf der Kommandozeile aber nicht möglich.
> Ich würde dir raten ein JDK Version 17 LTS zu installieren. Das ist eine stabile Version mit Langzeitsupport, gibts bei Microsoft als MSI (du nutzt ja Windows) https://docs.microsoft.com/en-us/java/openjdk/download.


Danke, das schaue ich mir nachher mal in Ruhe an.


----------



## Sven003 (23. Mai 2022)

Oneixee5 hat gesagt.:


> Diese Auflistung irritiert mich etwas. Du benötigst normalerweise kein extra JRE wenn ein JDK installiert ist. Andererseits genügt ein JRE wenn du mit Eclipse entwickelst, da Eclipse einen eigenen Compiler mitbringt. Dann ist das Kompilieren auf der Kommandozeile aber nicht möglich.
> Ich würde dir raten ein JDK Version 17 LTS zu installieren. Das ist eine stabile Version mit Langzeitsupport, gibts bei Microsoft als MSI (du nutzt ja Windows) https://docs.microsoft.com/en-us/java/openjdk/download. Zu prüfen wäre auch, ob deine Eclipse-Version überhaupt Java 18 unterstützt, falls du Java 18 nutzen willst.


Danke euch allen 
Die Antwort von Oneixee5 war die Lösung.
Nachdem ich meine JDK Version gelöscht und Version 17 LTS installiert hatte, klappt jetzt die Ausgabe der Console von Eclipse so wie es sein sollte.


----------



## Arrive5784 (23. Mai 2022)

Du musst das in den Eclipse-Einstellungen umstellen.


----------

