watanabe> エスケープとか全部含めて encode する必要があります.

でした。いま気が付いて返事を書こうとしたところ。
残念、先を越された、、、^^;

「厳密」には encode される文字列の前後には 半角space が無ければ
ならない とか MIME encode はうるさくて、かつ実情と合わない点が
ありその部分は困ったな、ですが、実情に合わせた形で実害は(あまり)
なさそうなのでこれでつくってしまいます。
特に全角の前後を " で囲むと、中の encode はescapeされるのか
否か、と言う問題が、あるのですが、「escapeされない、この部分は
 " で囲まれているかいないかに関わらず、全角部分だけencodeする。
でお茶を濁して、

require "kconv"

class String
  def decode64 #(str)
    Kconv::tojis(self)
  end

  def encode64
    str = Kconv::tojis(self)
    str.gsub!(/(\e\$B[^\e]+\e\(B)/) {
       "=?ISO-2022-JP?B?" + [$1].pack("m").chop + "?="
    }
    str
  end
end


----------
>最長一致も使えるのでstr.gsub!(/(\e\$B.+?\e\(B)/) {

最短一致ですよね ^^
こういう時の +? の文法になれていないのですが、
「+? 直前の表現の1回以上の繰り返し(最短一致) 」
というのは、「 .+? の最短一致」 ではなく、それを囲む
  \e\$B.+?\e\(B 全体の 最短一致ですか?

その影響範囲は、/  / 全体? それとも 今回の様に ( ) の
中にある時は ( ) 内までですか?