2009年9月26日土曜日

findbugs で、UTF-8 のソースをチェックする

findbugs で、openGion を解析すると、ソースの行番号が表示されないのと、ソースのコメントが文字化けしていることに気づいたと思います。

ソースの行番号に関しては、すでに、debug 情報を付与して再コンパイルすることで対応できることを示しました。

ソースのコメントが文字化けしているのは、openGion のソースコードが、UTF-8 で記述されているためです。そこで、findbugs で、UTF-8 のソースコードを解析する方法を、探ってみましょう。

なお、ここでは、Eclipse のプラグインではなく、GUIアプリケーションとしての実行例を示します。

【調査】
findbugs-1.3.9\bin\findbugs.bat -help とすることで、どのような引数があるのか見てみます。

ざっとみて、ソースのエンコードを指定するパラメータはなさそうです。

実は、ざくっと、findbugs のソースを見ましたが、デフォルトエンコードのReader でソースを読んでいるようです。そこで、java のパラメータでデフォルトエンコードをUTF-8に変えてみましょう。

引数として、-jvmArgs がありますので、

call bin\findbugs.bat -gui -jvmArgs "-Dfile.encoding=UTF-8"

として、実行してみます。

【実行】
実行すると、どうでしょう。
確かに、ソースのコメントは、きちんと日本語で表示されるようになりましたが、今度は、findbugs 自身のメッセージが文字化け(□ □ □・・)してしまいました。

もう、必殺技しかありません。 (^^)

findbugs-1.3.9\lib\findbugs.jar をいじってみましょう。

ファイルの拡張子を、zip に変更することで、中の圧縮フォルダを見ることが出来ます。
そこで、最上位の messages_ja.xml ファイルを取り出し、エディターで開きます。
XMLファイルで記述されていますが、xml の encoding 宣言が、Shift_JIS と記述されています。これを、UTF-8 に変更し、ファイルもUTF-8 でセーブし直します。

UTF-8 化した、messages_ja.xml ファイルを、先のZIPファイルに書き戻した上で、拡張子を元のJARに戻します。これで、メッセージファイルも、UTF-8 化されたことになります。

【再実行】
今度は、findbugs のメッセージも、ソースのコメントも正常に表示されたと思います。

日本語で書かれたJavaのソースコードを、UTF-8 で記述すること自体が、あまりないのかもしれませんが、findbugs の messages_fr.xml は、UTF-8 で記述されているため、日本語のメッセージをUTF-8化して、Javaのソースは、Shitf-JIS をデフォルトにしておくことは、比較的簡単に対応できるのではないのでしょうか。findbugs は、まだまだ進化していますので、今後に期待したいと思います。

1 件のコメント:

  1. linux(fedora)でfindbug plugin(eclips)を利用していたのですが、参考似させていただいて、メッセージの文字化けを解消できました。
    ありがとうございます!

    返信削除