2010-09-08 162 views
0

的阵列I具有Unicode字符串传递给VBScript过程(未视觉基本6,但VBScript)的。我想通过char迭代unicode字符串char,获取每个符号的代码,将代码截断为字节范围[0..255]并创建字节数组。字节的VBScript:Unicode字符串转换为字节

这样新的数组应相比原始unicode字符串在存储器小两倍。我要保存这个数组通过ADODB.Stream对象提交进一步

我怎么能unicode字符串转换为字节数组截断以字节范围符号代码?

预先感谢您!

回答

0

看来是没有办法创造VBS的字节数组(虽然这是在Visual Basic中非常简单) - 所有的数组变量的数组。

任务是通过字符串类型将二进制流从服务器发送到vbs脚本。我已经找到了解决方案,在服务器上用CDATA节创建Xml文档,该节包含base64编码的字节数组作为字符串数据。

客户端(VBS)执行以下操作:

set xmlDoc = CreateObject("Microsoft.XmlDom") 
xmlDoc.loadXML(dataFromServer) 
base64str = xmlDoc.DocumentElement.Text ' it's base64 coded binary stream 
arrayOfBytes = decodeBase64(base64str) 

Function decodeBase64(base64) 
    set dm = CreateObject("Microsoft.XMLDOM") 
    set el = dm.createElement("tmp") 
    el.DataType = "bin.base64" 
    el.Text = base64 
    decodeBase64 = el.NodeTypedValue 
    set dm = Nothing 
End Function 
3

首先,如果你的字符串只包含ASCII字符的Unicode转换为ASCII才会工作。由于unicode包含ascii,它只是删除每个第二个字符的问题。

在互联网上查找unicode了解详情。

编辑:在Unicode中,每个ASCII字符进行与NULL(0)字节。删除此字节将字符串转换为ASCII。

+0

感谢您的回复,但在vbs中没有CharW函数。我发现了如何在vbs中创建字节数组,我会在几天内描述它 – 2010-09-09 10:14:39

0

该函数创建一个字节数组:

' http://www.motobit.com/tips/detpg_binarytostring/ 
Function MultiByteToBinary(MultiByte) 
    '� 2000 Antonin Foller, http://www.motobit.com 
    ' MultiByteToBinary converts multibyte string To real binary data (VT_UI1 | VT_ARRAY) 
    ' Using recordset 
    Dim RS, LMultiByte, Binary 
    Const adLongVarBinary = 205 
    Set RS = CreateObject("ADODB.Recordset") 
    LMultiByte = LenB(MultiByte) 
    If LMultiByte>0 Then 
    RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte 
    RS.Open 
    RS.AddNew 
     RS("mBinary").AppendChunk MultiByte & ChrB(0) 
    RS.Update 
    Binary = RS("mBinary").GetChunk(LMultiByte) 
    End If 
    MultiByteToBinary = Binary 
End Function 

该函数创建一个多字节字符串。

' http://www.motobit.com/help/regedit/pa26.htm 
'Converts unicode string to a multibyte string 
Function StringToMB(S) 
    Dim I, B 
    For I = 1 To Len(S) 
    B = B & ChrB(Asc(Mid(S, I, 1))) 
    Next 
    StringToMB = B 
End Function