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 里面有[汉字]将出错溢出。应该如何解决。
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 里面有[汉字]将出错溢出。应该如何解决。
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"))
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
但是用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用户名为中文时就会出错了。