Hatena::Groupmoz-addon

hogezilla RSSフィード

当ページに書かれているコードは、修正BSDライセンスのもと、再頒布して頂いて構いません。

 | 

2012-07-14

base64エンコード

| 17:31 | はてなブックマーク - base64エンコード - hogezilla

base64エンコードしたい場合、window.btoaは楽ではあるが、問題もある。

var str = window.btoa("あいうえお");
/*
[Exception... "String contains an invalid character"  code: "5" nsresult: "0x80530005 (InvalidCharacterError)"  location: "chrome://liberator/content/eval.js Line: 1"]
*/

非アスキー文字があると、InvalidCharacterErrorが発生する。JavaScriptは基本的にUnicode(UTF-16)なので、これをそのままbase64化してもうまく扱えないのだ。UTF-8あたりに変換してあげる必要がある。

ってことで、XPCOM的には以下を使用する

実はファイルのドラッグ&ドロップ - hogezillaのサンプルコードで既に書いているんだけどね。

function encodeBase64 (aStr) {
  const base64= Cc["@mozilla.org/scriptablebase64encoder;1"].getService(Ci.nsIScriptableBase64Encoder);

  var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
  converter.charset = "UTF-8";
  var input = converter.convertToInputStream(aStr);

  return base64.encodeToString(input, input.available());
}

nsIScriptableBase64Encoder.encodeToStringメソッドは引数にnsIInputStreamが必要。よって文字列をnsIInputSteramに変換する必要がある。

そこで、nsIScriptableUnicodeConverter.convertToInputStremを使用すれば、Unicode文字をUTF-8に変換しつつ、nsIInputStreamを作成できる。

トラックバック - http://moz-addon.g.hatena.ne.jp/teramako/20120714
 |