it-swarm.com.de

Eclipse falsche Java-Eigenschaften mit UTF-8-Kodierung

Ich habe ein JavaEE-Projekt, in dem ich Nachrichteneigenschaftendateien verwende. Die Kodierung dieser Datei ist auf UTF-8 eingestellt. In der Datei verwende ich die deutschen Umlaute wie ä, ö, ü. Das Problem ist, manchmal werden diese Zeichen durch Unicode wie \uFFFD\uFFFD ersetzt, jedoch nicht für jedes Zeichen. Nun habe ich einen Fall, in dem ä und ü beide durch \uFFFD\uFFFD ersetzt werden, jedoch nicht für jedes Auftreten von ä und ü.

Der Git-Unterschied zeigt mir so etwas:

 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

Es gibt auch Linien, die ich nicht angerührt habe. Ich verstehe nicht, warum ich so ein Verhalten bekomme. Was könnte die Ursache für das oben genannte Problem sein?

Mein System:

  • Antergos/Arch Linux

    • Systemkodierung 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

    • Textdatei-Kodierung UTF-8  ext file encoding
    • Eigenschaftsdatei-Kodierung UTF-8  Properties file encoding
  • Kater 8
  • Java JDK 8

Wenn ich einen anderen Editor wie Atom verwende, um diese Nachrichteneigenschaftendateien zu bearbeiten, stieß ich nicht auf dieses Problem.

Ich habe auch in einem Fall erkannt, wenn ich den ursprünglichen Wert browser.searchForSimilarImages=ähnliche aus Git diff kopiere und den falschen Wert browser.searchForSimilarImages=\uFFFD\uFFFDhnliche in Eclipse damit ersetze, dann habe ich die richtigen Umlaute in der Nachrichteneigenschaftendatei.

24
BuZZ-dEE

Ursache:

Standardmäßig wird für die Eclipse-Eigenschaftendatei (read here ) die Zeichencodierung nach ISO 8859-1 verwendet. Wenn die Datei Zeichen enthält, die über ISO 8859-1 hinausgehen, wird sie nicht wie erwartet verarbeitet.

Lösung 1

Wenn Sie Eclipse verwenden, werden Sie feststellen, dass das Sonderzeichen implizit in das Äquivalent von\uXXXX umgewandelt wird. Versuchen Sie es zu kopieren

会意 字/會意 字

in eine in Eclipse geöffnete Eigenschaftsdatei.

EDIT: Laut Kommentar von OP

Aktualisieren Sie die Kodierung Ihres Eclipse wie unten gezeigt. Wenn Sie die Kodierung als UTF-32 festlegen, können Sie sogar ein chinesisches Zeichen sehen, das Sie im Allgemeinen nicht sehen können.

So ändern Sie die Codierung der Eigenschaftendatei in Eclipse: Siehe this Eclipse-Bugzilla-Bug für weitere Details, in dem auf einige andere Möglichkeiten eingegangen wird. enter image description here

Chinesische Zeichen können in Eclipse angezeigt werden, nachdem die Kodierung ordnungsgemäß festgelegt wurde:enter image description here

Lösung 2

Wenn oben nicht konsistent funktioniert (es funktioniert für mich und ich sehe keine Codierungsprobleme), versuchen Sie es mit einem Eclipse-Plugin, das die Codierung von Eigenschaften oder anderen Dateien übernimmt. Zum Beispiel Eclipse ResourceBundle Editor oder Extended Resource-Bundle Editor

Ich würde den Eclipse ResourceBundle Editor empfehlen.

Lösung 3

Eine andere Möglichkeit, die Kodierung der Datei zu ändern, ist die Edit --> Set Encoding-Option. Es ist wirklich wichtig, weil es den Standardzeichensatz und die Dateicodierung ändert. Spielen Sie herum, indem Sie die Kodierung mit der Edit --> Set Encoding-Option ändern, und führen Sie die folgenden Java-Sysout-Funktionen System.out.println("Default Charset=" + Charset.defaultCharset()); und System.out.println(System.getProperty("file.encoding")); aus.

 enter image description here


Nebenbei: 1 

Verarbeiten Sie die Eigenschaftendatei, um Inhalte mit der ISO 8859-1-Zeichencodierung zu erhalten, indem Sie native2ascii - Native-to-ASCII Converter verwenden.

Was native2ascii macht: Es konvertiert alle Nicht-ISO-8859-1-Zeichen in ihre entsprechenden\uXXXX-Zeichen. Dies ist ein gutes Werkzeug, da Sie nicht nach dem\uXXXX-Äquivalent eines Sonderzeichens suchen müssen.

Verwendung für UTF-8: native2ascii -encoding utf8 e:\a.txt e:\b.txt


Nebenbei: 2

Jedes Computerprogramm, egal ob eine IDE, ein Anwendungsserver, ein Webserver, ein Browser usw. nur Bits versteht, muss wissen, wie die Bits interpretiert werden müssen, um den erwarteten Sinn zu schaffen, da dieselben Bits je nach verwendeter Codierung unterschiedliche Zeichen darstellen können . Und hier kommt "Encoding" ins Spiel, indem ein eindeutiger Bezeichner zur Darstellung eines Zeichens verwendet wird, so dass alle Computerprogramme, verschiedene Betriebssysteme usw. den richtigen Weg für die Interpretation kennen.

Wenn Sie also mit einem Codierschema in eine Datei geschrieben haben, beispielsweise UTF-8 und dann mit einem beliebigen Editor lesen, der jedoch mit einem Codierschema als UTF-8 ausgeführt wird, können Sie davon ausgehen, dass die Anzeige korrekt ist. 

Bitte lesen Sie meine diese Antwort , um mehr Details zu erfahren, aber nicht aus Browser-Server-Perspektive.

28
hagrawal

Eigenschaftendateien werden voraussichtlich ISO-8859-1 (Latin-1) encoded ..__ sein. Wahrscheinlich ist dies auch das, was Eclipse standardmäßig festgelegt hat.

Sie müssen sicherstellen, dass jedes Werkzeug, das im Build ausgeführt wird oder was auch immer, die Spezifikation außer Acht lässt und stattdessen UTF-8 verwendet.

2
tilois

Fügen Sie Ihrer Eclipse.ini-Datei die folgenden Argumente hinzu.

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

Standardmäßig verwendet Eclipse das von der Java Virtual Machine (JVM) verwendete Kodierungsformat. Sie können die Dateikodierung auch auf utf-8 setzen. 

1
user1363516

Das sieht aus wie eine Mischung aus Eclipse- und Git-Kodierung oder eher nicht-Kodierung.

Git verwendet rohe Bytes und kümmert sich nicht um die Kodierung. Mit git diff erhalten Sie möglicherweise Zeichen wie hier . Ein Beispiel gibt es R<C3><BC>ckg<C3><A4>ngig # should be "Rückgängig"

Wie Sie sehen, gibt es zwei lustige Klammer-Dinge pro Umlaut. Und in Ihrem Editor gibt es immer zwei \uFFFD für jeden Umlaut in den Zeilen, die mit + beginnen.

Ich gehe also davon aus, dass Ihr UTF-8-Editor versucht, die Git-Notation zu interpretieren, und schlägt fehl. Dies führt wiederum zu der Darstellung \uFFFD, die im Wesentlichen bedeutet, dass dies ein Zeichen ist, dessen Wert unbekannt oder nicht darstellbar ist ( siehe hier ).

Wie im ersten Link vorgeschlagen, können Sie versuchen, LESSCHARSET=UTF-8 in Ihrer Umgebungsvariablen (Windows) einzustellen. Hmm, in Linux sollte es in etc/profile sein?

1
Calon

siehe: eine Markierung wie FFFD (REPLACEMENT CHARACTER) in http://unicode.org/faq/utf_bom.html

und siehe 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

ein Fall

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