vbscript/javascript版的base64编码函数,支持中文,代码超精简

The following fuctions wrapper the encoding/decoding functionality:

Private Function EncodeBase64(ByRef arrData() As Byte) As String

Dim objXML As MSXML2.DOMDocument

Dim objNode As MSXML2.IXMLDOMElement

' help from MSXML

Set objXML = New MSXML2.DOMDocument

' byte array to base64

Set objNode = objXML.createElement("b64")

objNode.dataType = "bin.base64"

objNode.nodeTypedValue = arrData

EncodeBase64 = objNode.Text

' thanks, bye

Set objNode = Nothing

Set objXML = Nothing

End Function

Private Function DecodeBase64(ByVal strData As String) As Byte()

Dim objXML As MSXML2.DOMDocument

Dim objNode As MSXML2.IXMLDOMElement

' help from MSXML

Set objXML = New MSXML2.DOMDocument

Set objNode = objXML.createElement("b64")

objNode.dataType = "bin.base64"

objNode.Text = strData

DecodeBase64 = objNode.nodeTypedValue

' thanks, bye

Set objNode = Nothing

Set objXML = Nothing

End Function

以下内容转自互联网,版权归原作者所有

vbscript版本:

Function Base64Encode(psText)

dim oXml, oStream, oNode

Set oXml =Server.CreateObject("MSXML2.DOMDocument")

Set oStream =Server.CreateObject("ADODB.Stream")

Set oNode =oXml.CreateElement("tmpNode")

oNode.dataType ="bin.base64"

oStream.Charset ="gb2312"

oStream.Type =2'0=adStateClosed 1=adStateOpen

If oStream.state =0 Then oStream.Open()

oStream.WriteText(psText)

oStream.Position =0

oStream.Type =1'1=adTypeBinary 2=adTypeText

oNode.nodeTypedValue =oStream.Read(-1)'-1=adReadAll

oStream.Close()

Base64Encode =oNode.Text

Set oNode =Nothing

Set oStream =Nothing

Set oXml =Nothing

End Function

javascript版本:

function Base64EncodeText(TextStr){

var xml_dom =new ActiveXObject("MSXML2.DOMDocument");

var ado_stream =new ActiveXObject("ADODB.Stream");

var tmpNode =xml_dom.createElement("tmpNode");

tmpNode.dataType ="bin.base64";

ado_stream.Charset ="gb2312";

ado_stream.Type =2;// 1=adTypeBinary 2=adTypeText

if(ado_stream.state ==0){// 0=adStateClosed 1=adStateOpen

ado_stream.Open();

}

ado_stream.WriteText(TextStr);

ado_stream.Position =0;

ado_stream.Type =1;// 1=adTypeBinary 2=adTypeText

tmpNode.nodeTypedValue =ado_stream.Read(-1);// -1=adReadAll

ado_stream.Close();

return tmpNode.text;

}

vbscript版本其实就是从javascript版本改过来的,可直接用于asp中,javascript版的也可以直接用于asp中,如果默认脚本语言是vbscript,则:

<script language="javascript" runat="server">

javascript版base64函数代码.....

</script>

另不止对字符串进行编码,还可以对文件进行编码,具体代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

<title> 用 XMLDOM 和 ADODB.Stream 实现base64编码解码 </title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<style type="text/css" title="">

#textarea1,#textarea3,#textarea5 { background-color: #EEEEEE; }

</style>

</head>

<body>

<h3>用 XMLDOM 和 ADODB.Stream 实现base64编码解码</h3>

<h5>By: CuiXiPing(无心)</h5>

<h4>1.对文件的base64编码</h4>

<input type="file" name="file1" readOnly></textarea>

<h4>2.对文本的base64编码</h4>

<input type="button" value="base64编码" onclick="textarea3.value=Base64EncodeText(textarea2.value)">

<br>

<textarea readOnly></textarea>

<h4>3.对文本的base64解码</h4>

<input type="button" value="base64解码" onclick="textarea5.value=Base64DecodeText(textarea4.value)">

<br>

<textarea readOnly></textarea>

<script language="javaScript">

<!--

function Base64EncodeFile(fileSpec){

var xml_dom = new ActiveXObject("MSXML2.DOMDocument");

var ado_stream = new ActiveXObject("ADODB.Stream");

var tmpNode = xml_dom.createElement("tmpNode");

tmpNode.dataType = "bin.base64";

ado_stream.Type = 1; // 1=adTypeBinary

if(ado_stream.state==0){ // 0=adStateClosed 1=adStateOpen

ado_stream.Open();

}

ado_stream.LoadFromFile(fileSpec);

tmpNode.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll

ado_stream.Close();

return tmpNode.text;

}

function Base64EncodeText(TextStr){

var xml_dom = new ActiveXObject("MSXML2.DOMDocument");

var ado_stream = new ActiveXObject("ADODB.Stream");

var tmpNode = xml_dom.createElement("tmpNode");

tmpNode.dataType = "bin.base64";

ado_stream.Charset = "gb2312";

ado_stream.Type = 2; // 1=adTypeBinary 2=adTypeText

if(ado_stream.state==0){ // 0=adStateClosed 1=adStateOpen

ado_stream.Open();

}

ado_stream.WriteText(TextStr);

ado_stream.Position = 0;

ado_stream.Type = 1; // 1=adTypeBinary 2=adTypeText

tmpNode.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll

ado_stream.Close();

return tmpNode.text;

}

function Base64DecodeText(Base64Str){

var xml_dom = new ActiveXObject("MSXML2.DOMDocument");

var ado_stream = new ActiveXObject("ADODB.Stream");

var tmpNode = xml_dom.createElement("tmpNode");

tmpNode.dataType = "bin.base64";

tmpNode.text = Base64Str;

ado_stream.Charset = "gb2312";

ado_stream.Type = 1; // 1=adTypeBinary 2=adTypeText

ado_stream.Open();

ado_stream.Write(tmpNode.nodeTypedValue);

ado_stream.Position = 0;

ado_stream.Type = 2; // 1=adTypeBinary 2=adTypeText

var str = ado_stream.ReadText(-1); // -1=adReadAll

ado_stream.Close();

return str;

}

//-->

</script>

</body>

</html>