それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

JavaScriptでBase64エンコードする。

JavaScriptにはBase64エンコード関数がない!!

ないけどエンコードできるよ。

ライブラリをまとめてみた。

  1. 高度な JavaScript 技集
  2. Schwarz Lanzenreiter
  3. 404 Blog Not Found

ブラウザなしで動かないじゃん!!

WSHJScript書いてるんだけど、上記のライブラリはブラウザないと動かないじゃん。なんだよ。不便じゃないか。

WSH(JScript)でBase64エンコード

いろいろ検討したり、ライブラリを自作てた。

でもWindowsなら既存の流用が楽だと分かった。

XMDOM内蔵されている。

XMDOM内蔵のものがあった。Base64を使う。これ楽ちん。

ソースコードbase64.js

var utena = {};
utena.base64encode = function (data) {
   var xml_dom = new ActiveXObject("Microsoft.XMLDOM");
   xml_dom.loadXML('<?xml version="1.0" ?> <root/>');
   xml_dom.documentElement.setAttribute("xmlns:dt", "urn:schemas-microsoft-com:datatypes");
   var node1 = xml_dom.createElement("file1");
   node1.dataType = "bin.base64";
   node1.nodeTypedValue=data;
   xml_dom.documentElement.appendChild(node1);
  return node1.text;
}

XMLにバイナリを入れるとBase64エンコードされるんですね。便利。このテクニックは応用できそうです。

WSHJScriptはバイナリ読めません。

読めません。本当です。困りました。WindowsScriptという名前ですが、バイナリ扱えません。Fileオブジェクトはテキストが前提です。画像ファイルのBase64エンコード試みた。が、バイナリ読めない。

ADODB.Stream使います。

WSHでは、ADODB.Streamでバイナリ扱います。頻出回答ですね。

バイナリ読込例 (base64.js続き)

バイナリを読み込んでBase64エンコードする。前述コードの続き

      var fso = new ActiveXObject('Scripting.FileSystemObject');
      var stream = new ActiveXObject('ADODB.Stream');
      stream.Type=1;//1=binary,2=text
      stream.Open();
      stream.LoadFromFile(fso.GetAbsolutePathName("fooooo.png"));
      var bin = stream.Read(-1);//-1:read all , -2 : read line
      var ret =utena.base64encode(bin);

Windows自動化。

JavaScriptでWindowsを自動化するのがマイブーム。WSH技術は枯れてて使いやすい。