zhuangxiu 发表于 2008-9-9 11:25:59

TCPRecv方法接收中文数据问题

client 端: TCPSend($ConnectedSocket, $szData)
Server端:$recv = TCPRecv($ConnectedSocket, 4096)
为何client 端发送英文的时候,server端能够接收全部字符,发送中文时候只能接收到第一个字符。
例如:client端发送“zhongwen”,server端能够收到“zhongwen”
            client端发送“中文”,server端只能够收到“中”

sanhen 发表于 2008-9-9 11:58:16

旧版的用ANSI版本。新版将中文转换一下。

zhuangxiu 发表于 2008-9-9 13:48:37

如何转化?用StringToBinary()在client端转化,然后在server端用BinaryToString()转化,还是不行!E4

remme 发表于 2010-1-20 00:27:34

转化后基本上。。。。。。也不行。。。。。。

remme 发表于 2010-1-20 00:59:06

还是字符串后面加空格管用。不多想了,明天测试了再说。

remme 发表于 2010-1-21 11:20:18

找了个曲折的方法。把文本另存为unicode的方式,然后读取文本里的中文字符串,再发送出去。

tcprecv收到后,再另存为文本,目前看到文本大小在6k。

rolaka 发表于 2010-1-21 21:24:19

最好先用base64编码再发送数据...不过tcp好像就没这个必要...

remme 发表于 2010-1-22 00:08:27

用文本,tcprecv的中文限制一次性大概是3k个字符。没细测。估计差不多到了窗口大小限制了。base64编码感觉上。。。。。

sonny 发表于 2010-1-22 00:20:59

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]
查看完整版本: TCPRecv方法接收中文数据问题