バリケンのRuby日記 RSSフィード

2006-06-05

[] 電子メールのSubjectをMIMEエンコードデコード  電子メールのSubjectをMIMEエンコード/デコード - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  電子メールのSubjectをMIMEエンコード/デコード - バリケンのRuby日記  電子メールのSubjectをMIMEエンコード/デコード - バリケンのRuby日記 のブックマークコメント

電子メールのSubjectをMIMEエンコードデコードしたいと思ったよ。

とりあえずQuickMLソースコードで、MIMEエンコードデコードしている部分を見てみることにしたよ。

# aptitude install quickml
$ less /usr/lib/ruby/1.8/quickml/mail.rb

MIMEエンコードをするencode_fieldメソッドは、次のように定義されていたよ。

def encode_field (field)
  field.toeuc.gsub(/[ -瑤]\S*\s*/) {|x|
    x.scan(/.{1,10}/).map {|y|
      "=?iso-2022-jp?B?" + y.tojis.to_a.pack('m').chomp + "?="
    }.join("\n ")
  }
end

ふーむ、10文字単位に切り出しているのには、なにか意味があるのかな?あと正規表現の「[ -瑤]」ってなんだろう。

次はMIMEデコードをするdecode_subjectメソッドをみてみよう。

def decode_subject (subject)
  NKF.nkf("-e", subject.gsub(/\n\s*/, " "))
end

ん、これだとさっきの10文字単位に切り出した文字列を連結するときに、10文字単位で空白が入っちゃいそうだね。いいのかなあ。

標準ライブラリでは、MIMEエンコードデコードするようなものはないのかな?

のりつぐのりつぐ2006/06/07 16:06「瑤」は第2水準の最後の文字みたいですね。全角スペースは最初のコードなので「[ -瑤]」で全角文字全体なんでしょうね〜

muscovyduckmuscovyduck2006/06/07 19:24のりつぐさん>
コメントありがとうございます!なるほど、「瑤」は第2水準の最後の文字文字なんですね。それにしても、コード体系に依存しない「全角文字全体」を表す正規表現が欲しいところですね。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20060605