技術的雑談-idljコマンドで日本語が文字化け
環境
JDK1.4.2_08、JDK1.5.0_03 WindowsXP上で確認
現象
idljコマンドを通すとIDLファイルに書き込んであるコメントが文字化けしてJavaのソースに反映される。
対処
JDK付属のidlj(.exe)というツールはIDLというCORBAでのインターフェース定義のファイルから対応するJavaのソースを自動生成してくれるツールです。
JacORBのidl(.exe)コマンドよりは幾分親切で、IDLファイルの中のコメントを適宜Javaソースにもコピーしてくれるのですが、文字化けさせてくれます。
(JacORBのidlコマンドはコメントをキレイさっぱりと削除してくれます^^;)
原因は、idljがAsciiエンコードされていないマルチバイト文字を理解できない為です。
よって、JDK付属ツールのnative2asciiを通せばちゃんと理解してくれそうです。
……が、ちょっと落とし穴があります。
idljコマンドはご丁寧にもShift-JISでそれぞれのJavaソースファイルに日本語のコメントを入れてくれやがります。
(やってみればわかります)
そこで、これを正しく元の日本語表示に「全部」戻すには以下の手順が必要です。
- もしそうでなかったら、IDLファイルの文字コードをShift-JISに変換しておく。
- IDLファイルをnative2ascii.exeでエンコード。 (native2ascii)
- エンコードしたファイルをidlj.exeに食わせてjavaのソースを作成
- 作成されたjavaソースにもう一回native2asciiをかけてエンコード(idlj.exeが余計なShif-JIS文字列をくっつけてくれるため、そのまま-reverseしても正しくデコードしてくれない!!)
- 最後に、javaソースをnative2ascii.exeに-reverseオプションをつけてデコードします
尚、ascii2nativeコマンドは既存ファイルを上書きしません。
なので、
native2ascii hogehoge.txt hogehoge.txt
などとしてもエンコードしてくれません。上の例の場合、
native2ascii hogehoge.txt hogehoge.txt.tmp del hogehoge.txt ren hogehoge.txt.tmp hogehoge.txt
とすれば目的が達せられるでしょう。
履歴
2005/7/14 -- 初版
技術的雑談へ戻る