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 wird, aber es sollte ein Copyright-Symbol sein und wird in der Warnung als Fragezeichen in einem Diamanten angezeigt.
Es ist erwähnenswert, dass das Zeichen im Ausgabeartefakt korrekt angezeigt wird, aber die Warnungen sind ein Ärgernis und die Datei, die diese Klasse enthält, kann eines Tages von einem Texteditor berührt werden, der die Codierung falsch speichert ...
Wie kann ich dieses Zeichen in die Zeichenfolge "copyright" einfügen, damit der Compiler zufrieden ist und das Symbol in der Datei ohne mögliche Probleme bei der Neucodierung erhalten bleibt?
hexdump AppDBCore.java
ich bezweifle es irgendwie\u00a9
und ist stattdessen etwas, das aufgrund Ihres System-Setups teilweise für Sie funktioniert. Das Fragezeichen oben wird verwendet, um ein eingehendes Zeichen zu ersetzen, dessen Wert in Unicode hexutf8.com/…Antworten:
Verwenden Sie das Escape-Format "\ uxxxx".
Laut Wikipedia lautet das Copyright-Symbol Unicode U + 00A9, daher sollte Ihre Zeile lauten:
quelle
Versuchen Sie es mit: javac -encoding ISO-8859-1 file_name.java
quelle
<compilerarg line="-encoding utf-8"/>
unter dem entsprechenden<javac>
Aufruf in IhrerBuild.xml
Datei hinzufügen . Dies ist ein schlechter Weg, aber Sie haben keine Wahl. Siehe meinen langen Kommentar oben.Wenn Sie Maven verwenden, legen Sie dies
<encoding>
explizit in der Konfiguration des Compiler-Plugins fest, zquelle
project.build.sourceEncoding
Eigenschaft festzulegen.Das hat mir geholfen:
Quelle: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/
quelle
javac MyJavaFile.java -encoding utf-8 -cp .;lib\*
funktioniert : Beim Ausführen musste ich diesen zusätzlichen Codierungsteil nicht hinzufügen.Fügen Sie diese Zeile in Ihre Datei .gradle über der Java-Konf. ein.
quelle
compileTestJava
undjavadoc
auchMeistens tritt dieser Kompilierungsfehler beim Kompilieren von Unicode-Dateien (UTF-8-codiert) auf
Außerdem können Sie diese Kompilierungsoption zu Ihrer IDE hinzufügen, z. B.: Intellij-Idee
(Datei> Einstellungen> Java-Compiler) als zusätzlichen Befehlszeilenparameter hinzufügen
quelle
Gradle Schritte
Wenn Sie Gradle verwenden, finden Sie die Zeile, in der das Java-Plugin angewendet wird:
Stellen Sie dann die Codierung für die Kompilierungsaufgabe auf UTF-8 ein:
Wenn Sie Unit-Tests haben, möchten Sie diese wahrscheinlich auch mit UTF-8 kompilieren:
Gesamtes Gradle-Beispiel
Dies bedeutet, dass der gesamte Gradle-Code ungefähr so aussehen würde:
quelle
Das hat bei mir funktioniert -
quelle
Wenn Sie Eclipse verwenden (Eclipse kann utf8-Code für Sie einfügen, selbst wenn Sie utf8-Zeichen schreiben. Beim Programmieren wird normales utf8-Zeichen angezeigt, der Hintergrund ist jedoch utf8-Code).
PS: Dies ist in Ordnung, wenn Sie einen statischen Wert im Code haben. Zum Beispiel String test = "İİİİİııııııçççççç";
quelle
Ich hatte das gleiche Problem, bei dem der in der Java-Fehlermeldung angegebene Zeichenindex falsch war. Ich habe es auf die doppelten Anführungszeichen eingegrenzt, kurz bevor die gemeldete Position Hex 094 (Abbrechen anstelle von Anführungszeichen, aber als Anführungszeichen dargestellt) anstelle von Hex 0222 war. Sobald ich gegen die Hex 022-Variante getauscht habe, war alles in Ordnung.
quelle
Wenn Sie Maven Build über die Eingabeaufforderung verwenden, können Sie auch den folgenden Befehl verwenden:
quelle
Wenn Sie sich fragen, warum dies auf einigen Systemen und nicht auf anderen (mit derselben Quelle, denselben Build-Parametern usw.) geschieht, überprüfen Sie Ihre
LANG
Umgebungsvariable . Ich bekomme die Warnung / den Fehler wannLANG=C.UTF-8
, aber nicht wannLANG=en_US.UTF-8
.quelle