133339
nom
2009/02/05
0
みんなも気付いている通り,LastNote の commit mail の Subject がどうも文字化けして,ずっと気になっていました. そのうち誰かが直すだろうと,放っておいたのですが, 今朝,U君の論文を読んだ後に珈琲を飲みながら どうしても我慢ならなくなって,ちょっと見てみました.
/var/svn/lastnote/hook/commit-email.rb の make_subject 中という,それらしい名前の関数.
def make_subject(name, info, params) subject = "" project = detect_project(info, params) subject << "#{name} " if name if project subject << "[#{project} r#{info.revision}] " else subject << "r#{info.revision}: " end subject << info.log.lstrip.to_a.first.to_s.chomp NKF.nkf("-WM", subject) end
最後の info.log を加工して NKF (漢字コード変換) しているところが怪しいのですが,同じことを手元の PC の irb でやってもうまくいく….
そういえば,以前,古いRuby + NKF のバグではまったことがあったよね, というのを思い出して,tsubame の irb で実験.
その結果,どうも,tsubame の Ruby 1.8.5 では, NKF が壊れているらしく,入力の文字コードが UTF8 だった場合に MIME B encode をすると, 最後の ESC を落としてしまいます. 最後が ASCII で終わる Subject が化けない理由もこれで納得.
ということで,不本意ながら,M17N から L10N にダウングレードして, EUC を経由するという場当たり的な解決をしました.
## NKF on Ruby 1.8.5 is broken. # # if input code is UTF8, -M mistakenly drops # the last ESC code of JIS string. # This is a workaround to avoid the problem. -- nom. # NKF.nkf("-EM", NKF.nkf("-We", subject)) # NKF.nkf("-WM", subject)
Ruby 1.8.[56] の頃の NKF は怪しいです. そろそろ tsubame の Ruby をバージョンアップしましょう.
No comment