Javaプロパティファイルでの日本語文字化け問題の解決方法

coding programming css 1853305

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ファイルの日本語がエディター内で文字化けを起こすので、元の内容で上書きします。もう一度実行します。

出力結果

テスト

標準出力の文字化けが解消されました。

よかったらシェアしてね!
目次