hiranojavaアプリケーションのcron起動時の文字化けに対応するTwitterFacebookGoogle+はてブPocket概要javaアプリケーションの起動を行った際に、ある部分で文字化けが起こったので対応について調査する。具体的には不具合が起こった箇所はjavaアプリケーションから外部プロセスを起動する部分や、メールを送信する機能の本文にVelocityのテンプレート機能を利用しており、これらを利用する箇所でそれぞれ日本語箇所が文字化けしていた。原因まず注目したいのは文字化けが起こっているケースがcronによるバッチからの起動に限定されることである。jarを作成してjavaコマンド経由でbashインタプリタ経由で起動している。こちらのwebプロセスは特に問題はない。先程メールが文字化けすると述べたが、実は文字化けするのは本文だけで、タイトルに関しては文字化けしていなかった。両者の違いは本文は外部テンプレートファイルから読み込んでいるのに対して、タイトルはソースコードに日本語をハードコーディングしている。このことから大きく予想できるのはcron経由で外部ファイルを読み込むときに何らかの不具合が生じていることである。cronはenvなどが特殊なんだろうかと当たりをつけて軽くウェブを検索するとこちらの記事を発見どうやらcron経由でのコマンドはユーザの環境変数は一切適用されない模様。解決わかってしまえばなんてことはない。今回は参考サイトに則ってcrontabの記述の上にenv設定を行うことにします。今回の場合はjavaがおそらく外部ファイルの文字コードを認識できていないのでcrontabの上部に下記のようにファイルエンコーディングを追記しました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。その1javaのクラスローダの仕組みについてRECOMMENDこちらの記事も人気です。