Je travaille actuellement sur un projet Java qui émet l'avertissement suivant lors de la compilation:
/src/com/myco/apps/AppDBCore.Java:439: warning: unmappable character for encoding UTF8
[javac] String copyright = "� 2003-2008 My Company. All rights reserved.";
Je ne sais pas comment SO rendra le caractère avant la date, mais il devrait s'agir d'un symbole de droit d'auteur et s'affiche dans l'avertissement sous forme de point d'interrogation dans un losange.
Il convient de noter que le caractère apparaît correctement dans l'artefact de sortie, mais les avertissements sont gênants et le fichier contenant cette classe peut un jour être touché par un éditeur de texte enregistrant de manière incorrecte le codage ...
Comment puis-je injecter ce caractère dans la chaîne "copyright" afin que le compilateur soit content et que le symbole soit conservé dans le fichier sans risque de réencodage?
Utilisez le format d'échappement "\ uxxxx".
Selon Wikipedia , le symbole de copyright est unicode U + 00A9, votre ligne devrait donc se lire:
String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
Essayez avec: javac -encoding ISO-8859-1 nom_fichier.Java
Si vous utilisez Maven, définissez la <encoding>
explicitement dans la configuration du plug-in du compilateur, par exemple.
<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>
Cela m'a aidé:
Tout ce que vous avez à faire est de spécifier une variable d’environnement appelée Java_TOOL_OPTIONS. Si vous définissez cette variable sur -Dfile.encoding = UTF8, à chaque démarrage d'une machine virtuelle Java, cette information sera collectée.
mettez cette ligne dans votre fichier .gradle au-dessus de Java conf.
apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}
La plupart du temps, cette erreur de compilation survient lors de la compilation du fichier unicode (codé en UTF-8).
javac -encoding UTF-8 HelloWorld.Java
et aussi Vous pouvez ajouter cette option de compilation à votre IDE ex: idée Intellij
(Fichier> Paramètres> Compilateur Java) Ajouter comme paramètre de ligne de commande supplémentaire
- encoding: encoding Définit le nom d'encodage du fichier source, tel que EUC-JP et UTF-8. Si -encodage n'est pas spécifié, le paramètre par défaut de la plate-forme le convertisseur est utilisé. ( DOC )
Si vous utilisez Gradle, vous pouvez trouver la ligne qui applique le plugin Java:
apply plugin: 'Java'
Définissez ensuite le codage de la tâche de compilation sur UTF-8:
compileJava {options.encoding = "UTF-8"}
Si vous avez des tests unitaires, vous voudrez probablement aussi les compiler avec UTF-8:
compileTestJava {options.encoding = "UTF-8"}
Cela signifie que le code de classement général ressemblerait à ceci:
apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}
Cela a fonctionné pour moi -
<?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>
Si quelqu'un utilise Maven Build à partir de l'invite de commande, vous pouvez également utiliser la commande suivante:
mvn -Dproject.build.sourceEncoding=UTF-8
Si vous utilisez Eclipse (Eclipse peut mettre du code utf8 pour vous même si vous écrivez un caractère utf8. Vous verrez le caractère utf8 normal lors de la programmation mais l'arrière-plan sera du code utf8);
P.S: Cela ira si vous avez une valeur statique dans le code. Par exemple, String test = "İİİİıııııııççççç";
J'ai eu le même problème, où l'index de caractères signalé dans le message d'erreur Java était incorrect. Je l'ai réduit aux caractères entre guillemets juste avant que la position signalée soit hex 094 (annuler au lieu de citation, mais représenté comme une citation) au lieu de l'hex 022. Dès que j'ai échangé pour la variante hex 2 02, tout allait bien.