「えーマジ native2ascii!?」「プロパティエディタプラグインが許されるのは J2SE 5.0 までだよねー」
ジャバエンジニアはそろそろ、プロパティファイルを扱う場合に native2ascii やら各種プロパティエディタプラグインやらの呪縛から解放されてもいいと思うのです…
概要
Java でアプリケーションの各種設定を記述したプロパティファイル (.properties) を取り扱う場合、 Properties クラスもしくは ResourceBundle クラスのお世話になるかと思います。
一昔前までは、プロパティファイル内で日本語などいわゆるマルチバイト文字を含む場合に、 native2ascii コマンドを利用して ASCII コードの文字のみで表現できる ユニコードエスケープ (!= UTF-xx エンコーディング) 表現に変換することが必要とされていました。
しかし、Java は 7 or 8 がメインストリームになり、また UTF-8 エンコーディングされたテキストを取り扱うことがわりと当たり前になりつつある昨今、いまだに Eclispe にわざわざプロパティエディタプラグインを導入してプロパティファイルをしこしこ編集したり、プロダクション環境でユニコードエスケープされたプロパティファイルを四苦八苦しながらパラメータ調整したりする現場があったりなかったりするようなので、ここで native2ascii とかプロパティエディタプラグインを必要と せずに UTF-8 エンコーディングされたプロパティファイルを扱う方法についてメモしておきます。
UTF-8 エンコーディングされたプロパティファイルを取り扱う方法
Properties クラスと ResourceBundle クラスそれぞれについて説明します。
その 1 : Properties クラスを使う場合
Properties#load(Reader) メソッドを呼び出す際の Reader オブジェクトを、UTF-8 エンコーディング指定した InputStreamReader オブジェクトにすれば OK です。
すなわち、以下のような実装になるでしょう。
その 2 : ResourceBundle クラスを使う場合
こちらは若干複雑になりますが、 ResourceBundle.Control クラスのサブクラスを用意して対処する方法をとります。
同クラスの newBundle() メソッドのオーバーライド実装にて、 Properties のときと同様に UTF-8 エンコーディング指定した InputStreamReader オブジェクトを用意し、 PropertyResourceBundle クラスのコンストラクタ引数にそのオブジェクトを指定します。
そして実際に ResourceBundle クラスのオブジェクトを取得する際に、その ResourceBundle.Control サブクラスのオブジェクトを ResourceBundle.getBundle(String, ResourceBundle.Control) メソッドの二つ目の引数に指定してやることで、UTF-8 エンコーディングなプロパティファイルを取り扱うことができるようになります。
実装は以下のとおり。
まとめ
PropertiesもResourceBundleもどちらも、文字エンコーディング指定したInputStreamReaderオブジェクトを扱うようにすれば、native2ascii的な呪縛から逃れることができるよ- UTF-8 エンコーディングなどにしておけば、プロダクション環境上でプロパティファイルをどうしても確認しなきゃいけなくなった場合でも、プロパティファイルに記述した日本語コメントを頼りにスムーズな確認ができるようになるよね
- プロパティエディタプラグインはもうオワコン扱いでいいよね
That is a very good tip particularly to those new to
返信削除the blogosphere. Brief but very accurate information… Thanks for sharing
this one. A must read post! 온라인경마
It is very well written, and your points are well-expressed. I request you warmly, please, don’t ever stop writing. 먹튀검증디비
返信削除هل تبحثون عن ارخص شركة تنظيف خزانات بمكة بأسعار معقولة وجودة عالية نحن في شركتنا نقدم لكم خدمات تنظيف خزانات المياه بخصم 50% مما يجعلنا الخيار الأمثل لمن يرغب في الحصول على خدمة ممتازة بتكلفة منخفضة.
返信削除ارخص شركة تنظيف خزانات بمكة