読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

コミットメールが文字化けする

linux

環境: Debian sarge で Subversion 1.3.1 使用時。
ほとんどDebianの初期設定のままで使ってるから、他にも化けてる人はたくさん居そうなので書いておきます。

ちなみに、メールを送るpost-commitスクリプトには、ネットで拾ったRubyのやつを利用。

通の文字化けでなくて、文字がバックスラッシュ記法の数字で

?\130?\146?\227?\131?\170?\227?\131?\149?\227?\130?\161
?\227?\130?\175?\227?\130?\191?\227?\131?\170?\227?\131?\179?\227?\130?\176

とかみたいに表示される場合がこのケース。

原因は、Apacheがwww-data権限でsvnlookを起動しようとすると、ロケールの周りがうまくないのかLANG環境変数が設定されていないのか、
それを察知したsvnlookがUTF-8データをバックスラッシュ記法にエンコーディングしてしまうこと(たぶん)。

だから、LANG環境変数を設定してsvnlookコマンドを実行してやればいいだろうと予想して実行。

ちまたでは svnlog2utf8.rb とかもあるようですが、自分の環境では、以下で十分動いてます。

svnlook = %r{ svnlook #{REPOS} #{REV} }

となっている部分を、

svnlook = %r{ /bin/env LANG=ja_JP.eucJP /usr/bin/svnlook #{REPOS} #{REV} }

を変更することで解決。

ちなみに、svnlookをフルパスで指定しているのは、たぶん、LANGが設定されていないということはPATHも設定されていない可能性が高いため。
#ここらへんはあんまり詳しくないので、とりあえず動けばよしと。

たぶん、Debianの設定をうまくすれば回避できるだろうけれど、とりあえず以上でいいことにしました。

【広告】