redmineで「utf-8 からネイティブのエンコーディングに文字列を変換できません」

redmine上でリポジトリの内容を確認しようとする際に、subversionにエラーが発生すると画面上には「リポジトリに、エントリ/リビジョンが存在しません。」をはじめ、シンプルなエラーメッセージしか表示されない上、subversionでエラーが発生すると redmine/log/production.log もサーバステータスが 500(Internal Server Error)を返してる旨しか記録されず、原因究明にてこずります。

更にsubversionをWebDAV経由で利用している場合、subversionでエラーが発生するとエラーメッセージはapacheのerror_logに記録されますが、日本語を含むマルチバイトの文字列が文字化けしてがっかりします。

これをどうにかしようと思って作成したのが前々回のperlスクリプトなのですが、その結果、

'utf-8' からネイティブのエンコーディングに文字列を変換できません

と表示された場合の対処法について(前振りが長かった……)。

とりあえずgoogleで「subversion utf-8 からネイティブのエンコーディングに文字列を変換できません」と検索すると、

というページが見つかります。このページではUTF-8 なホストに、EUC-JP のターミナルで接続している場合 (export LANG=ja_JP.eucJP してある) にという状況が書かれています。

が、これはウチの環境に限ったことなのか分かりませんが、redmineを通すと LANG=ja_JP.UTF-8 が設定されてるはずのサーバでも上述のエラーが出てました。apache実行アカウントがロケール情報を読み込めてなかったのかも。

とりあえず /private/etc/bashrc (Linuxならだいたい /etc/bashrc)に先のブログ記事を参考に、

export LANG=ja_JP.UTF-8
export LANG=ja_JP.UTF-8 svn st

と併記してapacheを再起動してみるとちゃんと動いてくれました。