Public Sub PackBytes(ByteArray() As Byte, ByVal PostData As String)iBytes = Len(PostData) - 1If iBytes < 0 Then Exit Sub
ReDim ByteArray(iBytes)
   For i = 0 To iBytes
      ch = Mid(PostData, i + 1, 1)
      If ch = Space(1) Then
         ch = "+"
      End If
      ByteArray(i) = Asc(ch)
   NextEnd Sub
作用:将POSTDATA 字符串转换成ASC 存为BYTE类型。
问题:如果POSTDATA 里面有[汉字]将出错溢出。应该如何解决。

解决方案 »

  1.   

    因为汉字的asc值超出了byte(0-255)范围。
      

  2.   

    用StrConv将汉字转换成Byte数组
      

  3.   

    转换成16进制。比如:字符串"文件夹12A",相应的16进制代码为:CEC4BCFEBCD0313241Debug.Print Chr(&HCEC4), Hex(Asc("文"))
    Debug.Print Chr(&HBCFE), Hex(Asc("件"))
    Debug.Print Chr(&HBCD0), Hex(Asc("夹"))
    Debug.Print Chr(&H31), Hex(Asc("1"))
    Debug.Print Chr(&H32), Hex(Asc("2"))
    Debug.Print Chr(&H41), Hex(Asc("A"))
      

  4.   

    Private Sub Command1_Click()
    Dim arr()
    S = "中华人民共和国"
    For I = 1 To Len(S) '将汉字转换成Byte数组
    S1 = Mid(S, I, 1)
    Dim arr1() As Byte
    arr1 = StrConv(S1, vbFromUnicode)
    ReDim Preserve arr(I)
    arr(I) = arr1
    Next
    For J = 0 To UBound(arr) '将Byte数组转换成汉字
    L = StrConv(arr(J), vbUnicode)
    S2 = S2 & L
    Next
    MsgBox S2
    End Sub
      

  5.   

    将得到的数据保存为一个文件,用二进制打开,得到的数据放入Byte数组似乎也可以.
      

  6.   

    谢谢。这些方法都不错。
    但是用StrConv转换后,向网页POST的数据好像不能被识别。
    好像只能用ASC或ASCW。
    ByteArray(i) = Asc(ch)就是这个。老出错。登录网站,POST数据代码。Dim c_NewObj_IE As InternetExplorer
    '定义 POST地址 = vPost , HTTP头 = vHeaders , Post数据 = cPostData
    Dim vPost As Variant
    Dim vHeaders As Variant'创建新的IE对象
    Set c_NewObj_IE = New InternetExplorer'设置IE属性是否可见
    c_NewObj_IE.Visible = TrueReDim aByte(0) As Byte'定义POST数据/发送的内容设置.
    cPostData ="tpl_ok=&next_target=&tpl=mn&skip_ok=&aid=&need_pay=&need_coin=&pay_method=&u=http%3A%2F%2Fwww.baidu.com%2F&return_method=get&more_param=&return_type=&psp_tt=0&username=用户名&password=密码"
    PackBytes aByte(), cPostData'这里进行转换的过程是上面提问的那个过程
    vPost = aByte()'发送POST数据并打开页面
    vHeaders = "Content-Type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)
    c_NewObj_IE.Navigate strPostURL, , , vPost, vHeaders用户名为中文时就会出错了。