「えーマジ 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 エンコーディングなどにしておけば、プロダクション環境上でプロパティファイルをどうしても確認しなきゃいけなくなった場合でも、プロパティファイルに記述した日本語コメントを頼りにスムーズな確認ができるようになるよね
- プロパティエディタプラグインはもうオワコン扱いでいいよね
Hi Good day
返信削除It was really useful for me
Thanks for putting it on your site
I come to your site every week – thank you 먹튀검증
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! 온라인경마
What a nice comment! Nice to meet you. I live in a different country from you. Your writing will be of great help to me and to many other people living in our country. I was looking for a post like this, but I finally found 바카라사이트
返信削除Hi my friend! I want to say that this post is awesome, great written and include approximately all important infos.
返信削除I would like to look extra posts like this . 토토
It is very well written, and your points are well-expressed. I request you warmly, please, don’t ever stop writing. 먹튀검증디비
返信削除