UTF-8 エンコーディングされたプロパティファイルを扱うときのメモ

公開日:2018-11-13
最終更新:2018-11-13

native2ascii コマンドは使いたくない、でもユニコードエスケープもしたくない…UTF-8 エンコーディングされたプロパティファイルを扱う場合のメモ。

マルチバイト文字を含むプロパティファイルをそのまま扱うと文字化けしてしまうので、ResourceBundle.Controlクラスを継承したサブクラスを用意する。

で、サブクラス内でnewBundle()メソッドをオーバーライドして、UTF-8エンコーディング指定したInputStreamReaderオブジェクトを扱うように実装する。

/**
 * UTF-8エンコーディングされたプロパティファイルからResourceBundleオブジェクトを生成
 */
public class ResourceBundleWithEncording extends ResourceBundle.Control {

     private static final String SUFFIX = "properties";
     private static final String ENCODE = "UTF-8";

     @Override
     public ResourceBundle newBundle(String baseName, Locale locale, 
             String format, ClassLoader loader, boolean reload)
         throws IllegalAccessException, InstantiationException, IOException {

         String bundleName = toBundleName(baseName, locale);
         String resourceName = toResourceName(bundleName, SUFFIX);

         try (InputStream is = loader.getResourceAsStream(resourceName);
             InputStreamReader isr = new InputStreamReader(is, ENCODE);
             BufferedReader reader = new BufferedReader(isr)) {
             return new PropertyResourceBundle(reader);
         }
     }
}

あとは、作成したサブクラスのオブジェクトをResourceBundle.getBundleメソッドの引数に指定するだけ。

ResourceBundle rb = ResourceBundle.getBundle("resources", Locale.locale,  new ResourceBundleWithEncording());

ただ、Java 9 でようやくResourceBundle のデフォルト文字コードが UTF-8になったので今後の出番はあんまりなさそう。

参考

Java のプロパティファイルは UTF-8 エンコーディングで記述したい

Eclipseでapplication.propertiesの値を取得すると文字化けする

記事が少しでもいいなと思ったらクラップを送ってみよう!
36
+1
@shimamchan'の技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする