找回密码
 加入
搜索
查看: 2954|回复: 8

TCPRecv方法接收中文数据问题

[复制链接]
发表于 2008-9-9 11:25:59 | 显示全部楼层 |阅读模式
client 端: TCPSend($ConnectedSocket, $szData)
Server端:$recv = TCPRecv($ConnectedSocket, 4096)
为何client 端发送英文的时候,server端能够接收全部字符,发送中文时候只能接收到第一个字符。
例如:client端发送“zhongwen”,server端能够收到“zhongwen”
            client端发送“中文”,server端只能够收到“中”
发表于 2008-9-9 11:58:16 | 显示全部楼层
旧版的用ANSI版本。新版将中文转换一下。
 楼主| 发表于 2008-9-9 13:48:37 | 显示全部楼层
如何转化?用StringToBinary()在client端转化,然后在server端用BinaryToString()转化,还是不行!E4
发表于 2010-1-20 00:27:34 | 显示全部楼层
转化后基本上。。。。。。也不行。。。。。。
发表于 2010-1-20 00:59:06 | 显示全部楼层
还是字符串后面加空格管用。不多想了,明天测试了再说。
发表于 2010-1-21 11:20:18 | 显示全部楼层
找了个曲折的方法。把文本另存为unicode的方式,然后读取文本里的中文字符串,再发送出去。

tcprecv收到后,再另存为文本,目前看到文本大小在6k。
发表于 2010-1-21 21:24:19 | 显示全部楼层
最好先用base64编码再发送数据...不过tcp好像就没这个必要...
发表于 2010-1-22 00:08:27 | 显示全部楼层
用文本,tcprecv的中文限制一次性大概是3k个字符。没细测。估计差不多到了窗口大小限制了。base64编码感觉上。。。。。
发表于 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金钱 +10 收起 理由
t87564833 + 10 你的发函数非常帅

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-22 14:33 , Processed in 0.078014 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表