【问题标题】:vbscript: convert unicode string to array of bytesvbscript:将unicode字符串转换为字节数组
【发布时间】:2010-09-08 21:39:11
【问题描述】:

我已将 unicode 字符串传递给 vbscript 程序(不是 Visual Basic 6,而是 vbscript)。我想逐个字符地迭代 unicode 字符串,获取每个符号的代码,将代码截断到字节范围 [0..255] 并创建字节数组。

与原始 unicode 字符串相比,这样新的字节数组在内存中应该小两倍。我将通过ADODB.Stream 对象进一步将此数组保存到文件中

如何将 unicode 字符串转换为字节数组,并将符号代码截断为字节范围?

提前感谢您!

【问题讨论】:

    标签: vbscript automation type-conversion


    【解决方案1】:

    首先,仅当您的字符串仅包含 ascii 字符时,将 unicode 转换为 ascii 才有效。由于 unicode 包含 ascii,因此只需删除每隔一个字符即可。

    在互联网上查找 unicode 以了解详细信息。

    编辑:在 unicode 中,每个 ascii 字符都以 NULL (0) 字节开头。删除此字节以将字符串转换为 ASCII。

    【讨论】:

    • 感谢回复,vbs中没有CharW功能。我找到了如何在 vbs 中创建字节数组的方法,我将在几天内描述
    【解决方案2】:

    似乎没有办法在 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】:

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

      ' 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 2013-08-21
        • 2021-11-11
        • 1970-01-01
        • 2017-04-16
        相关资源
        最近更新 更多