web-dev-qa-db-ja.com

Eclipseの間違ったJavaプロパティUTF-8エンコーディング

メッセージプロパティファイルを使用するJavaEEプロジェクトがあります。それらのファイルのエンコードはUTF-8に設定されます。ファイルでは、äöüのようなドイツ語のウムラウトを使用しています。問題は、これらの文字が\uFFFD\uFFFDのようなユニコードに置き換えられることもありますが、すべての文字ではありません。今、私はäüの両方が\uFFFD\uFFFDに置き換えられているが、äüのすべての出現に対してではありません。

Git diffには次のようなものが表示されます。

 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

また、私が触れていない行が変更されています。なぜこのような振る舞いをするのか理解できません。上記の問題の原因は何ですか?

私のシステム:

  • アンテルゴス/ Arch Linux

    • システムエンコーディング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'
      
  • エクリプス火星1

    • UTF-8エンコードテキストファイル ext file encoding
    • UTF-8をエンコードするプロパティファイル Properties file encoding
  • Tomcat 8
  • Java JDK 8

Atom のような別のエディターを使用してこれらのメッセージプロパティファイルを編集する場合、この問題に遭遇することはありません。

また、Git diffから元の値browser.searchForSimilarImages=ähnlicheをコピーし、Eclipseの間違った値browser.searchForSimilarImages=\uFFFD\uFFFDhnlicheをそれで置き換えると、メッセージプロパティファイルに正しいウムラウトが含まれていることにも気付きました。

25
BuZZ-dEE

根本的な原因:

デフォルトでは、EclipseプロパティファイルにISO 8859-1文字エンコードが使用されます( here を読み取ります)。したがって、ファイルにISO 8859-1を超える文字が含まれている場合、期待どおりに処理されません。

解決策1

Eclipseを使用している場合、特殊文字が暗黙的に\ uXXXXに変換されることがわかります。コピーしてみてください

会意字/會意字

eclipseで開かれたプロパティファイルに。

編集:OPからのコメントに従って

以下に示すように、Eclipseのエンコードを更新します。エンコードをUTF-32に設定すると、一般的には見ることができない中国語の文字も見ることができます。

Eclipseでのプロパティファイルのエンコードの変更方法:this Eclipseを参照詳細については、Bugzillaのバグを参照してください。このバグでは、他のいくつかの可能性について説明し、最終的には以下で強調したことを提案します。 enter image description here

エンコードが適切に設定された後、Eclipseで中国語の文字を見ることができます: enter image description here

解決策2

上記があなたのために一貫して動作しない場合(それは私のために動作し、エンコーディングの問題は表示されません)、いくつかのEclipseプラグインを使用してこれを試してくださいプロパティまたはその他のファイルのエンコードを処理します。たとえば、 Eclipse ResourceBundle Editor または Extended Resource-Bundle editor

Eclipse ResourceBundle Editorの使用をお勧めします。

解決策3

ファイルのエンコードを変更する別の可能性は、_Edit --> Set Encoding_オプションを使用することです。本当に重要なのは、デフォルトの文字セットとファイルエンコーディングが変更されるためです。 _Edit --> Set Encoding_オプションを使用してエンコードを変更し、Java sysout System.out.println("Default Charset=" + Charset.defaultCharset());およびSystem.out.println(System.getProperty("file.encoding"));_

enter image description here


余談として:1

native2ascii-Native-to-ASCII Converter を使用して、プロパティファイルを処理して、ISO 8859-1文字エンコードのコンテンツを作成します。

native2asciiの機能:同等の\ uXXXXのすべての非ISO 8859-1文字を変換します。これは、特殊文字に相当する\ uXXXXを検索する必要がないため、優れたツールです。

UTF-8の使用法:_native2ascii -encoding utf8 e:\a.txt e:\b.txt_


余談として:2

IDE、アプリケーションサーバー、ウェブサーバー、ブラウザなどのすべてのコンピュータープログラムはビットのみを理解するため、使用されるエンコーディングに応じて、同じビットが異なる文字を表すことができるため、ビットを解釈してそれを理解する方法を知る必要があります。 そして、すべてのコンピュータープログラム、多様なOSなどがそれを解釈する正確な正しい方法を知ることができるように、文字を表す一意の識別子を与えることで「エンコーディング」が登場します。

だから、何らかのエンコーディングスキームを使用してファイルに書き込んだ場合、UTF-8と言ってから、UTF-8としてエンコーディングスキームで実行しているエディタを使用して読み込むと、正しい表示

ブラウザサーバーの観点から詳細を取得するには、私の この回答 を読んでください。

31
hagrawal

プロパティファイル は、 ISO-8859-1(Latin-1) エンコードされることが期待されています。ほとんどの場合、これはデフォルトでEclipseが設定されたものです。

ビルドで実行されるすべてのツールまたは仕様を無視し、代わりにUTF-8を使用することを確認する必要があります。

2
tilois

Eclipse.iniファイルに次の引数を追加します。

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

デフォルトでは、EclipseはJava Virtual Machine(JVM)によって選択されたエンコード形式を使用します。また、ファイルエンコードをutf-8に設定できます。

1
user1363516

これは、Eclipseとgitエンコードの混合または非エンコードのように見えます。

Gitは生のバイトを使用し、エンコードを気にしません。 git diffを使用すると、次のような文字が表示される場合があります here 。たとえば、R<C3><BC>ckg<C3><A4>ngig # should be "Rückgängig"があります。

ご覧のとおり、ウムラウトごとに2つのかっこがあります。また、エディターでは、+で始まる行のウムラウトごとに常に2つの\uFFFDがあります。

したがって、UTF-8エディターはgit表記を解釈しようとして失敗すると想定しています。これは順番に表現\uFFFDにつながります。これは基本的に、これが値が不明または表現できない文字であることを意味します( こちらを参照 )。

最初のリンクで提案されているように、環境変数にLESSCHARSET=UTF-8を設定してみてください(Windows)。うーん、Linuxではetc/profileにありますか?

1
Calon

参照: http://unicode.org/faq/utf_bom.html のFFFD(REPLACEMENT CHARACTER)などのマーカー

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

ケース

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