Yuki猫のおうち

気ままに自由に日々を生きる

Eclipseで作ったjarを実行したら文字化けした時のお話

Eclipse上には独自の環境が構築されているらしいぞ

Eclipse上では正常に動作していたプログラムを、jarファイルとして出力してwindowsで実行したらなぜか正常に動作しなかった時のお話。

プログラムとしては、キーワードが書かれたファイルを読み込んで、Wikipedia APIを使ってキーワードのwikipediaページを取得するというもの。

wikipedia.simpleapi.net

それで、httpでPOSTした時になぜか結果が表示されないという問題が起こりました。

悪いのはだいたい文字コード

何が原因だったかというと、文字コードでした。

windowsでは、OS標準の文字コードがShift-JISになっているのですが、ファイルの入出力の際にFileInputStreamでUTF-8指定して読み込めば大丈夫だと思ってました。

事実、Eclipse上ではそれで実行できていたわけですし。
ただいろいろ調べてみると、どうやらこれはEclipseの環境設定でText file encodingの設定をUTF-8にしていたから動作していたわけであって、jarとして出力した場合は実行時に以下のように環境変数でencodingを設定しないといけないらしい。

java -Dfile.encoding=UTF-8 -jar hogehoge.jar

でも、いちいちターミナルから実行するなんてめんどくさいですよね。
せっかくjarにしたんだからクリックで起動したい。

そこで、ソースコードに次の一文を書き加えれば、実行時ではなく、実行後に環境変数の設定を行うことができます。

System.setProperty("file.encoding", "UTF-8");

これで文字コード問題は解消されて、クリックで起動してもちゃんと結果が返ってくるようになりました。

注) setPropertyメソッドの第二引数を変更すると、UTF-8以外の文字コードも設定できます。