小弟我用winsock发送数据到远程数据库,如何返回一些乱码呢
我用winsock发送数据到远程数据库,怎么返回一些乱码呢?
我用winsock发送数据CUST:namet,11111 <SQL> SELECT * FROM name ORDER BY id </SQL> 到远程数据库,怎么接受到一些乱码呢?
------解决方案--------------------
我找到避免乱码的方法了。
发送的时候用StrConv函数将Unicode字符串转换成字节数组。
接收的时候用StrConv函数将字节数组转换成Unicode字符串。
发送的时候:
'准备发送的信息转换后的字节数组
Dim myMsgByteArray() As Byte
'将准备发送的信息转换为字节数组(将Unicode字符串转换成ANSI字符串)
myMsgByteArray = StrConv(praMSG, vbFromUnicode)
If tcpServer(N).State = sckConnected Then
'执行 SendData 方法将数据发送给远程计算机,会触发对方的 DataArrival 事件
tcpServer(N).SendData Data:=myMsgByteArray
DoEvents
End If
接收的时候:
'接收到的字节数组
Dim myGetDataByteArray() As Byte
If tcpServer(N).State = sckConnected Then
'通过 GetData 方法得到对方发送来的数据
tcpServer(N).GetData Data:=myGetDataByteArray, Type:=vbArray + vbByte
'把字节数组的二进制数据转换成一个合法的Visual Basic字符串(将ANSI字符串转换成Unicode字符串)
myGetData = StrConv(myGetDataByteArray, vbUnicode)
End If
虽然麻烦,但只有这样才能保证不乱码。
其实我造成乱码的原因是我把发送的方法 SendData 放在了另外一个专门用来发送数据的自定义函数里面,实际发送的数据作为参数带入。虽然加断点调试看到进入这个函数的数据没有乱,可实际调用 SendData 的时候,可能在转换编码的时候乱掉了。
我用winsock发送数据CUST:namet,11111 <SQL> SELECT * FROM name ORDER BY id </SQL> 到远程数据库,怎么接受到一些乱码呢?
------解决方案--------------------
我找到避免乱码的方法了。
发送的时候用StrConv函数将Unicode字符串转换成字节数组。
接收的时候用StrConv函数将字节数组转换成Unicode字符串。
发送的时候:
'准备发送的信息转换后的字节数组
Dim myMsgByteArray() As Byte
'将准备发送的信息转换为字节数组(将Unicode字符串转换成ANSI字符串)
myMsgByteArray = StrConv(praMSG, vbFromUnicode)
If tcpServer(N).State = sckConnected Then
'执行 SendData 方法将数据发送给远程计算机,会触发对方的 DataArrival 事件
tcpServer(N).SendData Data:=myMsgByteArray
DoEvents
End If
接收的时候:
'接收到的字节数组
Dim myGetDataByteArray() As Byte
If tcpServer(N).State = sckConnected Then
'通过 GetData 方法得到对方发送来的数据
tcpServer(N).GetData Data:=myGetDataByteArray, Type:=vbArray + vbByte
'把字节数组的二进制数据转换成一个合法的Visual Basic字符串(将ANSI字符串转换成Unicode字符串)
myGetData = StrConv(myGetDataByteArray, vbUnicode)
End If
虽然麻烦,但只有这样才能保证不乱码。
其实我造成乱码的原因是我把发送的方法 SendData 放在了另外一个专门用来发送数据的自定义函数里面,实际发送的数据作为参数带入。虽然加断点调试看到进入这个函数的数据没有乱,可实际调用 SendData 的时候,可能在转换编码的时候乱掉了。