[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] RE: java.util.Properties.load()でShiftJISを読みたい




>
>始めまして、最近Javaの勉強を始めた者です.
>
> 現在開発中のソフトで、テキストファイルから設定を読込みたい
>と思っていますが、java.util.Properties#load(InputStream) では
>ShiftJISで書かれたファイルを読み込むと文字バケしてしまいます.
> 対策 1) native2ascii.exe で変換する
> 対策 2) InputStream を extends したクラスを自作する
> 以外になにか良いやり方はないでしょうか?


中川と申します。
InputStreamでは文字エンコード変換ができないので、InputStreamReaderを使うとよ
いかもしれません。ただ、ReaderクラスからInputStreamクラスにはキャストできな
いので、なはだ不細工な方法ですが、いったんReaderクラスでテキストファイルを読
み込みそこで文字エンコードを変換し、そのあとでPropertiesに読ませる方法がある
にはあります。

FileInputStream in = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(in, string_encode);
//ここでエンコードを指定する。ここでstring_encodeを"JISAutoDetect"とすると自
動判別、"SJIS"とすればシフトJIS。
まあ、ここでファイルをいったん読み込んでしまい、それからもう一度Streamを作っ
て、Propertiesにloadしてしまうわけです。ただ、StringBufferInputStreamクラス
がjava1.1以降は推奨されていないので、上記のやり方は、はなはだ疑問ではあり
ます。

もしも、ここら辺のクラスをextendsして自作するのならば、InputStreamの方ではな
く、InputStreamReaderをloadできるPropertiesクラスの方ではないかと愚考します
が、、、

当方も初心者ゆえ、大はずしの可能性あり。