Java で Properties クラスを作成する場合、入力ストリームが ISO-8859-1 でエンコードされている必要があります。しかし実際には、ISO-8859-1 ではなく、UTF-8 を使用して非ラテン プロパティ ファイルを native2ascii ツールで変換します。
- JDK doc によると、入力ストリームは ISO-8859-1 でエンコードする必要があります。つまり、ソース ファイルは ISO-8859-1 でエンコードされています。
- デコードとエンコードは同じ ISO-8859-1 を使用する必要があるため、Java の Properties クラスは ISO-8859-1 を使用してデコードする必要があります。
- テストによると、実際には、ISO-8859-1 ではなく、native2ascii のエンコーディング オプションとして UTF-8 を使用しています。なんで?
次のようにテストします。
- 「key=Ü」を含む test.properties ファイルを作成します。
生成された ISO-8859-1 プロパティ ファイル: key=\u00c3\u009c
native2ascii -encoding ISO-8859-1 test.properties iso88591.propertie:
生成された UTF-8 プロパティ ファイル: key=\u00dc
native2ascii -encoding UTF-8 test.properties utf8.properties
プロパティを作成して、生成された 2 つのプロパティ ファイルをロードします。
Properties p = new Properties(); //InputStream inStream = new FileInputStream("src/test/java/com/active/translation/iso88591.properties"); InputStream inStream = new FileInputStream("src/test/java/com/active/translation/utf8.properties"); p.load(inStream); System.out.println(p.getProperty("key"));
iso88591.propertie の結果は次のとおりです。
- utf8.properties の結果: Ü
答え:
その -encoding は、ソース ファイルで使用されている実際のエンコーディングと一致する必要があります。見た目からしてUTF-8です。– Thilo 4 月 3 日 2:52