2010-09-08 145 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