web-dev-qa-db-fra.com

Eclipse Mauvaises propriétés Java Encodage UTF-8

J'ai un projet JavaEE dans lequel j'utilise des fichiers de propriétés de message. Le codage de ces fichiers est défini sur UTF-8. Dans le fichier, j'utilise les trémas allemands tels que ä, ö, ü. Le problème est que, parfois, ces caractères sont remplacés par unicode comme \uFFFD\uFFFD, mais pas pour chaque caractère. Maintenant, j’ai un cas où ä et ü sont tous deux remplacés par \uFFFD\uFFFD, mais pas pour chaque occurrence de ä et ü.

Le diff Git me montre quelque chose comme ceci:

 mail.adresses=E-Mail hinzufügen:
-mail.adresses.multiple=E-Mails durch Kommata getrennt hinzufügen.
+mail.adresses.multiple=E-Mails durch Kommata getrennt hinzuf\uFFFD\uFFFDgen.
 mail.title=Einladungs-E-Mail
 box.preview=Vorschau
 box.share.text=Sie können jetzt die ausgewählten Bilder mit Ihren Freunden teilen.
@@ -6880,7 +6880,7 @@ browser.cancel=Abbrechen
 browser.selectImage=übernehmen
 browser.starImage=merken
 browser.removeImage=Löschen
-browser.searchForSimilarImages=ähnliche
+browser.searchForSimilarImages=\uFFFD\uFFFDhnliche
 browser.clear_drop_box=löschen

En outre, il y a des lignes modifiées, que je n'ai pas touché. Je ne comprends pas pourquoi j'ai un tel comportement. Quelle pourrait être la cause du problème ci-dessus?

Mon système:

  • Antergos/Arch Linux

    • Système d'encodage UTF-8

      Python 3.5.0 (default, Sep 20 2015, 11:28:25) 
      [GCC 5.2.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import sys
      >>> sys.getdefaultencoding()
      'utf-8'
      
  • Eclipse Mars 1

    • Fichier texte encodé UTF-8  ext file encoding
    • Fichier de propriétés encodant UTF-8  Properties file encoding
  • Tomcat 8
  • Java JDK 8

Si j'utilise un autre éditeur comme Atom pour éditer ces fichiers de propriétés de message, je n'ai pas rencontré ce problème.

Je me suis aussi rendu compte dans un cas, si je copie la valeur originale browser.searchForSimilarImages=ähnliche à partir de Git diff et que je remplace la valeur incorrecte browser.searchForSimilarImages=\uFFFD\uFFFDhnliche dans Eclipse par celle-ci, le fichier de propriétés de message contient alors les trémas corrects.

24
BuZZ-dEE

Cause première:

Par défaut, le codage de caractères ISO 8859-1 est utilisé pour le fichier de propriétés Eclipse (read ici ). Ainsi, si le fichier contient un caractère autre que ISO 8859-1, il ne sera pas traité comme prévu.

Solution 1

Si vous utilisez Eclipse, vous remarquerez qu'il convertit implicitement le caractère spécial en équivalent\uXXXX. Essayez de copier

字/會意 字

dans un fichier de propriétés ouvert dans Eclipse.

EDIT: Selon le commentaire de l'OP

Mettez à jour le codage de votre Eclipse comme indiqué ci-dessous. Si vous définissez le codage sur UTF-32, vous pourrez même voir les caractères chinois, que vous ne pouvez pas voir généralement.

Comment changer le codage du fichier de propriétés dans Eclipse: Voir this Eclipse Bugzilla bug pour plus de détails, qui parle de plusieurs autres possibilités et suggère ce que j'ai souligné ci-dessous. enter image description here

Les caractères chinois peuvent être vus dans Eclipse une fois l'encodage correctement défini:enter image description here

Solution 2

Si ce qui précède ne fonctionne pas systématiquement pour vous (cela fonctionne pour moi et que je ne vois jamais de problèmes d'encodage), essayez-le à l'aide d'un plugin Eclipse qui gère l'encodage des propriétés ou d'autres fichiers. Par exemple, éditeur de ressources Eclipse ou éditeur de ressources étendues

Je recommanderais d'utiliser Eclipse ResourceBundle Editor.

Solution 3

Une autre possibilité pour changer le codage du fichier est d'utiliser l'option Edit --> Set Encoding. C'est vraiment important car cela change le jeu de caractères et l'encodage de fichier par défaut. Jouez avec en modifiant l'encodage à l'aide de l'option Edit --> Set Encoding et en suivant les instructions Java sysout System.out.println("Default Charset=" + Charset.defaultCharset()); et System.out.println(System.getProperty("file.encoding"));

enter image description here


En aparté: 1 

Traitez le fichier de propriétés pour qu'il contienne le codage de caractères ISO 8859-1 en utilisant native2ascii - Convertisseur Native-to-ASCII

Que fait native2ascii: Il convertit tous les caractères non ISO 8859-1 en leur équivalent\uXXXX. C'est un bon outil car vous n'avez pas besoin de rechercher l'équivalent\uXXXX du caractère spécial.

Utilisation pour UTF-8: native2ascii -encoding utf8 e:\a.txt e:\b.txt


En aparté: 2

Chaque programme informatique, qu’il s’agisse d’un IDE, d’un serveur d’applications, d’un serveur Web, d’un navigateur, etc., ne comprend que les bits; il doit donc savoir interpréter les bits pour en comprendre le sens attendu, car, en fonction du codage utilisé, les mêmes bits peuvent représenter des caractères différents. . Et c'est là qu'intervient "l'encodage" en donnant un identifiant unique pour représenter un caractère, de sorte que tous les programmes informatiques, divers systèmes d'exploitation, etc., sachent exactement comment l'interpréter.

Donc, si vous avez écrit dans un fichier en utilisant un schéma de codage, disons UTF-8, puis en lisant avec n'importe quel éditeur mais fonctionnant avec un schéma de codage au format UTF-8, vous pouvez vous attendre à obtenir un affichage correct. 

S'il vous plaît, lisez mon cette réponse _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _->-_-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _pP_ 'pour_________}} _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _p_ Pas__________} _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _en -enjj que vous n'avez pas besoin de plus de détails, navigateur.

28
hagrawal

Les fichiers de propriétés sont censés être ISO-8859-1 (Latin-1) encoded . Il est fort probable que ceci soit également défini par défaut par Eclipse.

Vous devez vous assurer que chaque outil exécuté dans la construction ou quoi que ce soit ne respecte pas les spécifications et utilise plutôt UTF-8.

2
tilois

Ajoutez les arguments suivants à votre fichier Eclipse.ini.

-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8

Par défaut, Eclipse utilise le format de codage sélectionné par la machine virtuelle Java (JVM). En outre, vous pouvez définir le codage du fichier sur utf-8

1
user1363516

Cela ressemble à un mélange de codage Eclipse et git ou plutôt de non codage.

Git utilise des octets bruts et se moque de l'encodage. En utilisant git diff, vous pourriez obtenir des caractères tels que ceux montrés ici . Un exemple, il est R<C3><BC>ckg<C3><A4>ngig # should be "Rückgängig"

Comme vous pouvez le voir, il y a deux choses amusantes entre parenthèses montrant par tréma. Et dans votre éditeur, il y a toujours deux \uFFFD pour chaque tréma dans les lignes commençant par +.

Je suppose donc que votre éditeur UTF-8 tente d’interpréter la notation git et échoue. Cela conduit à la représentation \uFFFD, ce qui signifie essentiellement qu'il s'agit d'un caractère dont la valeur est inconnue ou non représentable ( voir ici ).

Comme suggéré dans le premier lien, vous pouvez essayer de définir LESSCHARSET=UTF-8 dans votre variable d’environnement (Windows). Hmm, sous Linux cela devrait être dans etc/profile?

1
Calon

voir: un marqueur comme FFFD (REPLACEMENT CHARACTER) dans http://unicode.org/faq/utf_bom.html

et voir native2ascii --help

   -encoding encoding_name
          Specifies the name of the character encoding to be used by the conversion procedure. If this option is not present, then the
          default character encoding (as determined by the Java.nio.charset.Charset.defaultCharset method) is used. The encoding_name
          string must be the name of a character encoding that is supported by the JRE. See Supported Encodings at
          http://docs.Oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html

un cas

$ file yourfile.properties
yourfile.properties : ISO-8859 text, with very long lines
$ native2ascii -encoding ISO-8859-1 yourfile.properties yourfile.properties 
0
Bruce Zu