# Gradle Terminal/Console Encoder



## belshop1 (9. Okt 2022)

Hallo grüßt euch.

Aktuell bin ich an einem Projekt dran, welches mir im Terminal einen Text zurückgibt. In diesem Text sind Umlaute enthalten wie zB. ä-ö-ü. Leider gibt mir die Konsole nur Zeichen wie: "����" oder "????" zurück. Ich benutze Gradle version 7.5.1 und das Plugin "application" zum ausführen. Ich habe das ganze auch schon mit 


```
task runWithJavaExec(type: JavaExec) {
    group = "Execution"
    description = "Run the main class with JavaExecTask"
    classpath = sourceSets.main.runtimeClasspath
    main = "Tester.Main"
```


versucht. Leider zeigt er mir immer nur die Zeichen an.  Der folgende Code in: gradle.propertiers funktioniert auch nicht.


```
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
```



Ich dachte erst  das wäre ein Encoder Fehler von der IDE. Aber wenn ich eine andere Klasse ohne Gradle ausführe zeigt er mir die Umlaute an. Ich hab das  mit Visual Studio Code und Eclipse versucht. Auch neu erstelle Projekte wollen mir einfach die Umlaute nicht anzeigen. Ich denke das ist ein Encoder Fehler von Gradle? Falls jemand mehr dazu weiß, gerne antworten. Ich finde leider nichts dazu, weder hier noch bei google(oder ich such einfach falsch^^) Ich bin um jeden Tipp froh!

MFG


----------



## KonradN (9. Okt 2022)

Du musst zum einen sicher stellen, dass die Source Dateien alle in UTF-8 codiert sind.

Dann musst Du beim compilieren dafür sorgen, dass der Compiler die Source Dateien in UTF-8 liest.








						Gradle Goodness: Set Java Compiler Encoding
					

A blog about Groovy, Clojure, Java and other cool developer subjects.




					blog.mrhaki.com


----------



## belshop1 (9. Okt 2022)

Okay. Ich hab das mal ausprobiert und leider bekomme ich nur Fehler.



```
Could not get unknown property 'Compile' for project ':lib' of type org.gradle.api.Project.
```


Mit: 


```
tasks.withType(Javacompile) {
    options.encoding = 'UTF-8'
}
```
 
bekomme ich zwar keine Fehlermeldungen mehr. Es funktioniert aber auch nicht ^^.


----------



## KonradN (9. Okt 2022)

Es ist immer sinnvoll die gradle Dateien komplett zu zeigen um zu sehen, was Du genau gemacht hast.

Bei den Source Dateien bist Du Dir auch sicher, dass diese im UTF-8 Format codiert sind?

Ggf. ist es hilfreich ein kleines, minimales Beispielprojekt zu bauen und dann als ZIP bereit zu stellen, damit man es auch reproduzieren kann. Das vereinfacht die Lösungsfindung dann auch.


----------



## belshop1 (9. Okt 2022)

Wenn ich ganz ehrlich bin, bin ich mir nicht sicher. Ich lasse mir in dem Testprojekt einfach nur ein einfaches äöü über ein println ausgeben.

mein build.gradle sieht so aus:


```
/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java library project to get you started.
 * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
 * User Manual available at https://docs.gradle.org/7.4.2/userguide/building_java_projects.html
 */

plugins {
    // Apply the java-library plugin for API and implementation separation.
    id 'java-library'
    id 'application'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit Jupiter for testing.
    testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:30.1.1-jre'
}

tasks.named('test') {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

application {
    mainClass = 'TestProjekt.Main'
}

compileJava.options.encoding = 'UTF-8'
```


----------



## KonradN (9. Okt 2022)

Ich selbst mache mit gradle sehr wenig, aber du solltest noch folgende Dinge ausprobieren:

a) Was ich so gesehen habe, war immer so ein tasks.withTypes zusammen mit dem
`compileJava.options.encoding = 'UTF-8'`
Das sehe ich also immer irgendwie beides zusammen.

b) folgendes kann ggf. auch noch helfen:
`org.gradle.jvmargs='-Dfile.encoding=UTF-8'`

Wichtig ist halt auch, das Encoding der Dateien zu prüfen. Notepad++ zeigt das recht schön an unter Windows. Aber IntelliJ kann das auch (wenn auch etwas umständlicher)

Welches Betriebssystem und welche Java Version nutzt Du? Ich würde jetzt vermuten, dass Du Windows nutzt (die meisten anderen Plattformen sind schon einige Zeit komplett hin zu UTF-8 gewechselt als default Encoding. Bei Java 19 passiert das aber wohl erst bei Windows).

Was damit nichts zu tun haben sollte: Plugin hast du id 'java-library' und nicht 'java'? Aber wenn du damit etwas bauen konntest, das Du ausführen konntest, dann ist das auf jeden Fall ok.



belshop1 hat gesagt.:


> Ich lasse mir in dem Testprojekt einfach nur ein einfaches äöü über ein println ausgeben.


Ok, also wirklich das äöü im .java File in einem String Literal. Dann dürfte es nur am Encoding der java Datei und/oder dem verwendeten Encoding beim Aufruf des java compilers liegen.


----------



## belshop1 (9. Okt 2022)

Ich nutze Windows und Java18.0.2.1

'java-library' wurde selbst bei der Projekterstellung generiert.

Ich habe mal in der build.gradle das encoding auf utf16 gestellt und habe folgende Fehler bekommen:


```
/*
 
> :lib:compileJava
��C:\Path..\TestProjekt\lib\src\main\java\TestProjekt\Library.java:1: error: unmappable character (0x0A) for encoding UTF-16
/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package TestProjekt;

public class Library {
    public boolean someLibraryMethod() {
        return true;
    }
}��
                                                                                              ^
C:\Path...\TestProjekt\lib\src\main\java\TestProjekt\Library.java:1: error: illegal character: '\u2f2a'
⼪ਠ⨠周楳⁊慶愠獯畲捥⁦楬攠睡猠来湥牡瑥搠批⁴桥⁇牡摬攠❩湩琧⁴慳欮ਠ⨯ੰ慣歡来⁔敳瑐牯橥歴㬍ਊ灵扬楣⁣污獳⁌楢牡特⁻ਠ†⁰畢汩挠扯潬敡渠獯浥䱩扲慲祍整桯搨⤠笊††††牥瑵牮⁴牵攻ਠ†⁽੽�
```

Also kann ich den Compiler ausschließen. Denn das funktioniert ja.. (bzw. das Encoding des Compilers..)


----------



## KonradN (9. Okt 2022)

Ok, dann wirklich einmal des Encoding prüfen. Hast Du Notepad++? Damit die Datei öffnen und dann kannst Du das Encoding sehen:
Im Menü unter Codierung schauen, auf was es da steht. Ich würde da Windows-1252, ISO 8859-15 oder ANSI vermuten. Sollte das der Fall sein, dann kannst Du es über Codierung -> Konvertiere zu UTF-8 umwandeln.


----------



## belshop1 (9. Okt 2022)

Tatsächlich ist es schon UTF-8. Ich habs nochmal zu UTF-8 konvertiert. Hat leider nichts gebracht.


----------



## belshop1 (11. Okt 2022)

Ich habe mir nun IntelliJ installiert und von dort aus ein Gradle Projekt erstellt. Damit funktioniert alles einwandfrei. Ich weiß nicht genau warum das mit Eclipse erstellte Projekt diese Fehler gemacht hat..
Thread kann also geschlossen werden.


----------

