commit mail の文字化け

みんなも気付いている通り,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 をバージョンアップしましょう.



Comment

No comment