Je travaille actuellement sur un projet Java qui émet l'avertissement suivant lorsque je compile:
/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 copyright et s'affiche dans l'avertissement sous la forme d'un point d'interrogation dans un losange.
Il est à noter que le caractère apparaît correctement dans l'artefact de sortie, mais les avertissements sont une nuisance et le fichier contenant cette classe peut un jour être touché par un éditeur de texte qui enregistre de manière incorrecte l'encodage ...
Comment puis-je injecter ce caractère dans la chaîne "copyright" pour que le compilateur soit satisfait et que le symbole soit conservé dans le fichier sans problèmes de réencodage potentiels?
hexdump AppDBCore.java
j'en doute d'une manière ou d'une autre\u00a9
et c'est quelque chose qui fonctionne partiellement pour vous à cause de la configuration de votre système. Le point d'interrogation ci-dessus est utilisé pour remplacer un caractère entrant dont la valeur est inconnue ou non représentable dans Unicode hexutf8.comRéponses:
Utilisez le format d'échappement "\ uxxxx".
Selon Wikipédia , le symbole du droit d'auteur est unicode U + 00A9, votre ligne doit donc lire:
la source
Essayez avec: javac -encoding ISO-8859-1 nom_fichier.java
la source
<compilerarg line="-encoding utf-8"/>
sous l'<javac>
appel applicable dans votreBuild.xml
dossier. C'est une mauvaise façon de le faire, mais vous n'avez pas le choix. Voir mon long commentaire en haut.Si vous utilisez Maven, définissez
<encoding>
explicitement le dans la configuration du plugin du compilateur, par exemplela source
project.build.sourceEncoding
propriété.Cela m'a aidé:
Source: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/
la source
javac MyJavaFile.java -encoding utf-8 -cp .;lib\*
puis lors de son exécution, je n'ai pas eu besoin d'ajouter cette partie d'encodage supplémentaire.mettez cette ligne dans votre fichier .gradle au-dessus de la configuration Java.
la source
compileTestJava
et pourjavadoc
aussiLa plupart du temps, cette erreur de compilation survient lors de la compilation de fichiers Unicode (encodé en UTF-8)
et aussi Vous pouvez ajouter cette option de compilation à votre IDE ex: Intellij idea
(File> settings> Java Compiler) ajouter comme paramètre de ligne de commande supplémentaire
la source
Étapes Gradle
Si vous utilisez Gradle, vous pouvez trouver la ligne qui applique le plugin java:
Ensuite, définissez le codage de la tâche de compilation sur UTF-8:
Si vous avez des tests unitaires, vous voudrez probablement les compiler également avec UTF-8:
Exemple général de Gradle
Cela signifie que le code de gradle global ressemblerait à ceci:
la source
Cela a fonctionné pour moi -
la source
Si vous utilisez eclipse (Eclipse peut mettre du code utf8 pour vous même si vous écrivez le caractère utf8. Vous verrez le caractère utf8 normal lorsque vous programmez mais l'arrière-plan sera du code utf8);
PS: cela ira si vous avez une valeur statique dans le code. Par exemple String test = "İİİİİııııııçççç";
la source
J'ai eu le même problème, où l'index des caractères signalé dans le message d'erreur java était incorrect. Je l'ai réduit aux doubles guillemets juste avant que la position signalée soit hex 094 (annuler au lieu de guillemets, mais représentée comme une citation) au lieu de hex 022. Dès que j'ai échangé pour la variante hex 022 tout allait bien.
la source
Si vous utilisez Maven Build à partir de l'invite de commande, vous pouvez également utiliser la commande suivante:
la source
Pour ceux qui se demandent pourquoi cela se produit sur certains systèmes et pas sur d'autres (avec la même source, les mêmes paramètres de construction, etc.), vérifiez votre
LANG
variable d'environnement . J'obtiens l'avertissement / l'erreur quandLANG=C.UTF-8
, mais pas quandLANG=en_US.UTF-8
.la source