2006-01-18

_ Re: 小林さんの日記

denson さんも書いてるけど、 終わったのかな、修論、ではなく DWN-2006-02。そっちかよ!

_ [ruby][tmail] $KCODE

"NONE" やら "UTF8" では、C-T: の name に生JISが入ってるようなときに、 うまくパラメータをとってこれないなぁ。

$ cat mail.txt
Content-Type: application/octet-stream; name="本"

$ nkf -g mail.txt
ISO-2022-JP
$ cat ct.rb
require "tmail"
mail = TMail::Mail.parse(ARGF.read)
ct = mail.header["content-type"]
p ct.params
ct.instance_eval do
  # FIXME: irresponsible regexp
  if m = %r!(.+)/(.+); name="(.+)"!in.match(@body)
    @main = m[1].downcase
    @sub = m[2].downcase
    (@params ||= {})["name"] = to_kcode(m[3])
  end
end
p ct.params
$ ruby -Kn ct.rb mail.txt | nkf -w
{"name"=>"\e$BK\e(B"}
{"name"=>"\e$BK\\\e(B"}
$ ruby -Ku ct.rb mail.txt | nkf -w
{"name"=>""}
{"name"=>"本"}
$ ruby -Ke ct.rb mail.txt | nkf -w
{"name"=>"本"}
{"name"=>"本"}
$ ruby -Ks ct.rb mail.txt | nkf -w
{"name"=>"本"}
{"name"=>"本"}

バックスラッシュが消えちゃう模様。 "UTF8" で使うのは、何かと問題が多いのかなぁ。

[]