Intellij IDEAで以下のようにプロパティファイルを読み込むコードを実行したところ、標準出力で文字化けする事象が発生しました。この問題の原因と解決策を説明します。
config.properties
test=テスト
PropertiesLoader
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import java.io.FileInputStream;
public class PropertiesLoader {
public static void main(String[] args) {
Properties properties = new Properties();
try (InputStreamReader reader = new InputStreamReader(
new FileInputStream("config.properties"), StandardCharsets.UTF_8)) {
properties.load(reader);
String value = properties.getProperty("test");
System.out.println(value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
出力結果
???
出力結果が文字化けしています。
原因
JavaのProperties
クラスはデフォルトでISO 8859-1の文字エンコーディングを使用しますが、このエンコーディングは日本語をサポートしていません。そのため、プロパティファイルに日本語を使用する場合、UTF-8などの他のエンコーディングを使用する必要があります。
対応策
プロパティファイルのエンコーディングをUTF-8に変更して、問題を解決しています。これにより、プロパティファイル内の日本語テキストが正しく読み込まれ、標準出力に正しく表示されます。
ただし、他のJavaプロジェクトでこのプロパティファイルを使用する場合、そのプロジェクトも同様にUTF-8でプロパティファイルを読み込むように設定する必要があります。それ以外の場合、文字化けの問題が再発する可能性があります。
また、プロパティファイルのエンコーディングを変更する代わりに、日本語テキストを\uXXXX
形式のユニコードエスケープに変換することもできます。この方法では、特別なエンコーディング設定なしでプロパティファイルを使用できます。例えば、”テスト”は\u30c6\u30b9\u30c8
としてエスケープできます。
プロパティファイルのエンコーディングをUTF-8に変更する
今回の解決策としては、ファイルのエンコーディングをUTF-8に変更する方法を取ります。
以下の手順を実行するとpropertiesファイル自体がエディターで文字化けしてしまうので、内容をコピーしておきます。
⌘,
で設定を開き Editor>File Encodings
に移動します。
Default encoding for properties files を ISO-8659-1 から UTF-8に変更します。
元々のpropertiesファイルの日本語がエディター内で文字化けを起こすので、元の内容で上書きします。もう一度実行します。
出力結果
テスト
標準出力の文字化けが解消されました。