Ich arbeite derzeit an einem Java Projekt, das beim Kompilieren die folgende Warnung ausgibt:
/src/com/myco/apps/AppDBCore.Java:439: warning: unmappable character for encoding UTF8
[javac] String copyright = "� 2003-2008 My Company. All rights reserved.";
Ich bin nicht sicher, wie SO das Zeichen vor dem Datum rendern soll, aber es sollte ein Copyright-Symbol sein und wird in der Warnung als Fragezeichen in einer Raute angezeigt.
Es ist erwähnenswert, dass das Zeichen im Ausgabe-Artefakt korrekt angezeigt wird, aber die Warnungen sind störend und die Datei, die diese Klasse enthält, könnte eines Tages von einem Texteditor berührt werden, der die Codierung falsch speichert ...
Wie kann ich dieses Zeichen in den "copyright" -String einfügen, damit der Compiler zufrieden ist und das Symbol in der Datei erhalten bleibt, ohne dass potenzielle Neucodierungsprobleme auftreten?
Verwenden Sie das Escape-Format "\ uxxxx".
Laut Wikipedia ist das Copyright-Symbol Unicode U + 00A9, daher sollte Ihre Zeile lauten:
String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
Versuchen Sie es mit: javac -encoding ISO-8859-1 file_name.Java
Wenn Sie Maven verwenden, stellen Sie <encoding>
explizit in der Konfiguration des Compiler-Plugins, z.
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
Das hat mir geholfen:
Sie müssen lediglich eine Umgebungsvariable mit dem Namen Java_TOOL_OPTIONS angeben. Wenn Sie diese Variable auf -Dfile.encoding = UTF8 setzen, werden diese Informationen bei jedem Start einer JVM abgerufen.
setzen Sie diese Zeile in Ihre Datei .gradle über das Java conf.
apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}
Meistens tritt dieser Kompilierungsfehler beim Kompilieren von Unicode-Dateien (UTF-8-codiert) auf
javac -encoding UTF-8 HelloWorld.Java
sie können diese Kompilierungsoption auch zu Ihrer IDE ex: Intellij idea hinzufügen
(Datei> Einstellungen> Java Compiler) als zusätzlichen Befehlszeilenparameter hinzufügen
- encoding: encoding Legt den Namen der Quelldatei-Codierung fest, z. B. EUC-JP und UTF-8. Wenn -encoding nicht angegeben wird, wird die Plattform-Standardeinstellung verwendet Konverter verwendet wird. ( DOC )
Wenn Sie Gradle verwenden, finden Sie die Zeile, in der das Java Plugin angewendet wird:
apply plugin: 'Java'
Stellen Sie dann die Kodierung für die Kompilierungsaufgabe auf UTF-8 ein:
compileJava {options.encoding = "UTF-8"}
Wenn Sie Unit-Tests haben, möchten Sie diese wahrscheinlich auch mit UTF-8 kompilieren:
compileTestJava {options.encoding = "UTF-8"}
Dies bedeutet, dass der Gradle-Code insgesamt ungefähr so aussehen würde:
apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}
Das hat bei mir funktioniert -
<?xml version="1.0" encoding="utf-8" ?>
<project name="test" default="compile">
<target name="compile">
<javac srcdir="src" destdir="classes"
encoding="iso-8859-1" debug="true" />
</target>
</project>
Wenn Sie Maven Build von der Eingabeaufforderung aus verwenden, können Sie auch den folgenden Befehl verwenden:
mvn -Dproject.build.sourceEncoding=UTF-8
Wenn Sie Eclipse verwenden (Eclipse kann utf8-Code für Sie eingeben, auch wenn Sie ein utf8-Zeichen schreiben. Beim Programmieren sehen Sie ein normales utf8-Zeichen, aber der Hintergrund ist utf8-Code).
P.S: Dies ist in Ordnung, wenn Sie einen statischen Wert im Code haben. Zum Beispiel String test = "İİİİııııııççççç";
Ich hatte das gleiche Problem, bei dem der in der Java Fehlermeldung angegebene Zeichenindex falsch war. Ich habe ihn auf doppelte Anführungszeichen eingegrenzt, kurz bevor die gemeldete Position hex 094 ist (abbrechen statt Zitat, aber als Zitat dargestellt) statt Hex 022. Sobald ich gegen die Hex 022-Variante getauscht hatte, war alles in Ordnung.