FC2ブログ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
前回の記事でいただいたコメントをもとに、デコードするコードを組んでみました。
以下のdecodeメソッドの引数にBase64文字列を渡すと、
デコードされた文字列が返ってきます。



function decode(aInput) {
  MIMEHeaderParam = Components.classes['@mozilla.org/network/mime-hdrparam;1']
    .getService(Components.interfaces.nsIMIMEHeaderParam);
  var encodedParts = aInput.match(/=\?[-_a-z0-9]+\?.\?[^?]+\?=/gi);
  var self = this;
  encodedParts.sort().forEach(function(aPart) {
    if (!/[ \t]+/.test(aPart)) {
      aInput = aInput.replace(
        aPart,
        self.MIMEHeaderParam.getParameter(aPart, '', '', false, {})
      );
      return;
    }
    var prefix = aPart.match(/^=\?[^\?]+\?Q\?/);
    var parts = aPart.match(/[ \t]+|[^ \t]+/g);
    parts = parts.map(function(aSubPart, aIndex) {
      if (aIndex > 0 && !/[ \t]+/.test(aSubPart)) aSubPart = prefix + aSubPart;
      if (aIndex < parts.length-1 && !/[ \t]+/.test(aSubPart)) aSubPart += '?=';
      return aSubPart;
    }).join('');
    aInput = aInput.replace(aPart, self.decode(parts));
  });
  return aInput;
}


なぜデコードされるのかは、

MIMEHeaderParam = Components.classes['@mozilla.org/network/mime-hdrparam;1']
.getService(Components.interfaces.nsIMIMEHeaderParam);

が鍵なんだろうけど、まだ中身を見てないので
詳しい動作は不明です。調べたらまた書きます。

コメントありがとうございました:)
関連記事
スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://remotehost.blog54.fc2.com/tb.php/21-d337ff0e
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。