TCPRecv方法接收中文数据问题
client 端: TCPSend($ConnectedSocket, $szData)Server端:$recv = TCPRecv($ConnectedSocket, 4096)
为何client 端发送英文的时候,server端能够接收全部字符,发送中文时候只能接收到第一个字符。
例如:client端发送“zhongwen”,server端能够收到“zhongwen”
client端发送“中文”,server端只能够收到“中” 旧版的用ANSI版本。新版将中文转换一下。 如何转化?用StringToBinary()在client端转化,然后在server端用BinaryToString()转化,还是不行!E4 转化后基本上。。。。。。也不行。。。。。。 还是字符串后面加空格管用。不多想了,明天测试了再说。 找了个曲折的方法。把文本另存为unicode的方式,然后读取文本里的中文字符串,再发送出去。
tcprecv收到后,再另存为文本,目前看到文本大小在6k。 最好先用base64编码再发送数据...不过tcp好像就没这个必要... 用文本,tcprecv的中文限制一次性大概是3k个字符。没细测。估计差不多到了窗口大小限制了。base64编码感觉上。。。。。 Func String2Binary($sString)
Dim $BinaryString
For $i = 1 To StringLen($sString)
$STR = StringMid($sString, $i, 1)
If String(Binary($STR)) > 0xFF Then Return Binary($sString)
If String(Binary($STR)) < 0x80 Then
$BinaryString &= String(Binary($STR))
Else
$BinaryString &= String(Binary($STR & $STR))
EndIf
Next
$BinaryString = StringReplace($BinaryString, '0x', '')
Return Binary('0x' & $BinaryString)
EndFunc ;==>String2Binary
字符串转换的时候用这个函数是可以解决问题的。 我前两天也遇到这个问题。
页:
[1]