メッセージプロパティファイルを使用する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
Atom のような別のエディターを使用してこれらのメッセージプロパティファイルを編集する場合、この問題に遭遇することはありません。
また、Git diffから元の値browser.searchForSimilarImages=ähnliche
をコピーし、Eclipseの間違った値browser.searchForSimilarImages=\uFFFD\uFFFDhnliche
をそれで置き換えると、メッセージプロパティファイルに正しいウムラウトが含まれていることにも気付きました。
デフォルトでは、EclipseプロパティファイルにISO 8859-1文字エンコードが使用されます( here を読み取ります)。したがって、ファイルにISO 8859-1を超える文字が含まれている場合、期待どおりに処理されません。
Eclipseを使用している場合、特殊文字が暗黙的に\ uXXXXに変換されることがわかります。コピーしてみてください
会意字/會意字
eclipseで開かれたプロパティファイルに。
編集:OPからのコメントに従って
以下に示すように、Eclipseのエンコードを更新します。エンコードをUTF-32に設定すると、一般的には見ることができない中国語の文字も見ることができます。
Eclipseでのプロパティファイルのエンコードの変更方法:this Eclipseを参照詳細については、Bugzillaのバグを参照してください。このバグでは、他のいくつかの可能性について説明し、最終的には以下で強調したことを提案します。
エンコードが適切に設定された後、Eclipseで中国語の文字を見ることができます:
上記があなたのために一貫して動作しない場合(それは私のために動作し、エンコーディングの問題は表示されません)、いくつかのEclipseプラグインを使用してこれを試してくださいプロパティまたはその他のファイルのエンコードを処理します。たとえば、 Eclipse ResourceBundle Editor または Extended Resource-Bundle editor
Eclipse ResourceBundle Editorの使用をお勧めします。
ファイルのエンコードを変更する別の可能性は、_Edit --> Set Encoding
_オプションを使用することです。本当に重要なのは、デフォルトの文字セットとファイルエンコーディングが変更されるためです。 _Edit --> Set Encoding
_オプションを使用してエンコードを変更し、Java sysout System.out.println("Default Charset=" + Charset.defaultCharset());
およびSystem.out.println(System.getProperty("file.encoding"));
_
余談として: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としてエンコーディングスキームで実行しているエディタを使用して読み込むと、正しい表示
ブラウザサーバーの観点から詳細を取得するには、私の この回答 を読んでください。
プロパティファイル は、 ISO-8859-1(Latin-1) エンコードされることが期待されています。ほとんどの場合、これはデフォルトでEclipseが設定されたものです。
ビルドで実行されるすべてのツールまたは仕様を無視し、代わりにUTF-8を使用することを確認する必要があります。
Eclipse.ini
ファイルに次の引数を追加します。
-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8
デフォルトでは、EclipseはJava Virtual Machine(JVM)によって選択されたエンコード形式を使用します。また、ファイルエンコードをutf-8
に設定できます。
これは、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
にありますか?
参照: 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