元ブログからの移行記事です。
いきなりJavaの話。
先日、とある理由からこれまでEclipseでコンパイルしていたJavaのコードをJDKでコンパイルしないといけないことになり、とりあえずantのbuild.xml等用意してコンパイルしてみた。
で、こんなエラーが発生。
『XXXXXX.java:1: エラー: \65279は不正な文字です』
・・・????
Eclipseでコンパイルをかけても上記エラーは発生せず、何だこれは、と頭の中に『?』がぞろぞろと。
なぜEclipseだとエラーが出ないのか、という点については、Eclipseでコンパイルする際にはEclipse独自のコンパイラを使用していることが要因。 www.hitachi.co.jp
どうもEclipse独自のコンパイラはJDKよりもコンパイルエラーとする条件が緩い、らしい。。そのためにエラーが出ていたみたい。
Eclipseでコンパイルしたコードの挙動で問題になったことは自分の経験ではないのですが、気持ち悪いですね。。
で、結局のところどうしたらJDKでのコンパイルエラーが解消できるのか、何故エラーになるのかが分からずしばし途方に暮れていたのですが。
こういう場合はエラーメッセージでググるっていう鉄則?を忘れておりました。ああ恥ずかしい。
ググってみたらまんま同じ事象が出てきましたよ。 monokurotamago.hatenablog.com
どうやら、
\65279 = UTF-8のBOM(Byte Order Mark)
であり、コンパイルエラーとなっていたソースコードにBOMが含まれていたことが原因のようです。
BOMを外すには、サクラエディタで対象のコードを開いて、「名前をつけて保存」でBOMのチェックを外して保存でOK(詳細は上記リンク参照)。
そもそもBOMってなんやねん。ということでさらに調べると、 dorafop.my.coocan.jp
詳細は上記リンクを見て頂くとして、『Javaソースをメモ帳で編集してUTF-8で保存すると、選択の余地なく勝手にBOMが付いてしま』うということらしい。
コンパイルエラーになってたコードが1本だけなので、ナゼこの1本だけメモ帳で編集したのよ…?というギモンはあるのですが、とりあえず原因は判明してよかった。