web-dev-qa-db-fra.com

avertissement "caractère non mappable pour le codage" dans Java

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?

103
seanhodges

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.";
52
Jon Skeet

Essayez avec: javac -encoding ISO-8859-1 nom_fichier.Java

89
Fernando Nah

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>
41
Thomas Leonard

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.

Source: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/

30
nightlyop

mettez cette ligne dans votre fichier .gradle au-dessus de Java conf.

apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}   
20
Alobes5

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

enter image description here

- 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 )

7
Alupotha

Gradle Steps

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"}

Exemple de note globale

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"}
4
Luke Machowski

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>
2
Dxx0

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
1
5122014009

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);

  1. Sélectionnez Projet
  2. Faites un clic droit et sélectionnez Propriétés
  3. Sélectionnez Ressource sur Panneau de ressources (menu situé en haut à droite après 2.)
  4. Vous pouvez voir dans Panneau de ressources, Codage de fichier texte, sélectionnez-en un autre que vous voulez

P.S: Cela ira si vous avez une valeur statique dans le code. Par exemple, String test = "İİİİıııııııççççç";

1
baybora.oren

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.

1
Kelvin Goodson