Closure Compilerのエラー出力がなぜかSJISな謎

(追記: これはMac版のJava6のデフォルトエンコーディングSJISになっていることが原因らしい。Closure Compilerの問題ではない。)

自分のターミナルの文字コードも、ソースコード文字コードUTF-8なのに、それをコンパイルした際のエラー出力がなぜかSJISになってしまって困っている。何が原因だろう?

まずは前提を確認。ターミナルもソースコードUTF-8である。ちなみにOSはMac(Lion)だ。

tmp$ echo $LANG
ja_JP.UTF-8
tmp$ cat tmp.js
var x = "こんにちは"; y;
tmp$ nkf -g tmp.js
UTF-8

こいつをコンパイルすると標準エラー出力が化けてる。どうしてかと文字コードを確認してみたらなんとSJISという謎。(記事が化けてもややこしいので変な文字はxに置き換えておいた。)

tmp$ java -jar ../common/compiler.jar tmp.js > stdout.txt 2> stderr.txt
tmp$ cat stderr.txt
tmp.js:1: WARNING - Suspicious code. This code lacks side-effects. Is there a bug?
var x = "????x???"; y;
                 ^

0 error(s), 1 warning(s)

tmp$ nkf -g stderr.txt
Shift_JIS

charsetを指定したら直るのかなと思ったが、エラー出力の文字コードSJISのままだった。代わりに標準出力に出てきたコンパイル済みコードがUTF-8になった。

tmp$ java -jar ../common/compiler.jar --charset=utf8 tmp.js > stdout2.txt 2> stderr2.txt
tmp$ nkf -g stderr2.txt
Shift_JIS
tmp$ nkf -g stdout.txt
ASCII
tmp$ nkf -g stdout2.txt
UTF-8

追記

とりあえず対処療法としてはこれでよさそうな感じ。

$ java -Dfile.encoding=utf8 -jar ../common/compiler.jar tmp.js > stdout2.txt
tmp.js:1: WARNING - Suspicious code. This code lacks side-effects. Is there a bug?
var x = "こんにちは"; y;
                 ^

0 error(s), 1 warning(s)

jarが作られた環境が例えばWindowsなんかのターミナルがSJISなところで、コンパイル時にSJIS標準エラー出力のデフォルトエンコーディングとして埋め込んじゃってるとかってことなのかなぁ。