はじめに
以前、JScriptでHash取得で.NETの一部が使えるとの事で調べていくと、
「System.Security.Cryptography.ToBase64Transform」や
「System.Security.Cryptography.FromBase64Transform」といった、
Base64系のクラスがあったので、これらを利用して、
Base64エンコード、デコードのサンプルメソッドを作ったのですが、
よくよく調べてみると、「Msxml2.DOMDocument」で簡単に出来る事が分かりました。
Base64
// 「byte配列」から「Base64」に変換
function bytes2base64(bytes) {
var base64 = null;
// 「DOMDocument」生成
var doc = new ActiveXObject("Msxml2.DOMDocument");
// 「DomNode」生成(base64)
var element = doc.createElement("base64");
// 「dataType」に「bin.base64」を設定
element.dataType = "bin.base64";
// 「nodeTypedValue」に「byte配列」を設定
element.nodeTypedValue = bytes;
// 「text」を取得
base64 = element.text;
// 後処理
element = null;
doc = null;
return base64;
}
// 「Base64」から「byte配列」に変換
function base642bytes(base64) {
var bytes = null;
// 「DOMDocument」生成
var doc = new ActiveXObject("Msxml2.DOMDocument");
// 「DomNode」生成(base64)
var element = doc.createElement("base64");
// 「dataType」に「bin.base64」を設定
element.dataType = "bin.base64";
// 「nodeTypedValue」に「byte配列」を設定
element.text = base64;
// 「text」を取得
bytes = element.nodeTypedValue;
// 後処理
element = null;
doc = null;
return bytes;
}
蛇足
簡潔になりすぎたので、Base64とは全く関係ありませんが蛇足です。
実際に使う場面は無いと思われます、読み飛ばし推奨です。
「Msxml2.DOMDocument」オブジェクトの「dataType」ですが、
「string、number、Int、Boolean、dateTime、bin.hex、bin.base64」などあります。
以前、.NETの「System.Text.StringBuilder」が利用できるとわかった時
「AppendFormat」メソッドを上手に使えないかなと思ったのですが、
実際は、JScriptのDate型がそのまま渡せず、断念しました。
「dataType」の「dateTime」を使うとどうやらいけるようです。
ただし、コードが長いだけで、意味は無いかもしれません。
// 「文字列」から「dateTime型」へ変換
function string2dateTime(string) {
var dateTime = null;
// 「DOMDocument」生成
var doc = new ActiveXObject("Msxml2.DOMDocument");
// 「DomNode」生成(dateTime)
var element = doc.createElement("dateTime");
// 「dataType」に「dateTime」を設定
element.dataType = "dateTime";
// 「nodeTypedValue」に「byte配列」を設定
element.text = string;
// 「text」を取得
dateTime = element.nodeTypedValue;
// 後処理
element = null;
doc = null;
return dateTime;
}
変換対象の文字列はXMLのdateTimeフォーマットに合わせると、一応できるようです。
// 「StringBuilder」オブジェクト生成
var builder = new ActiveXObject("System.Text.StringBuilder");
// 現在日時取得
var date = new Date();
// 「yyyy-MM-dd'T'HH:mm:ss」型の文字列生成
var string = date.getFullYear() + "-"
+ ("0" + (date.getMonth() + 1)).slice(-2) + "-"
+ ("0" + date.getDate()).slice(-2) + "T"
+ ("0" + date.getHours()).slice(-2) + ":"
+ ("0" + date.getMinutes()).slice(-2) + ":"
+ ("0" + date.getSeconds()).slice(-2);
// 「dateTime」取得
var dateTime = string2dateTime(string);
// フォーマット
builder.AppendFormat("{0:yyyy/MM/dd HH:mm:ss dddd tt zzz}", dateTime);
WScript.Echo("" + builder.ToString());
// 後処理
builder = null;