Delphi2009的Bug:WinSocket元件接收和发送的编码不一致(在Delphi XE版本中已做修改)
2011-03-31 11:47
513 查看
Delphi2009的Bug:WinSocket元件接收和发送的编码不一致
转载自:http://multilanguage.tech.topzj.com/archiver/tid-14132.htmlDelphi2009的Bug:WinSocket元件接收和发送的编码不一致
delphi2009,版本12.0.3155.16733,Socket元件的发送接受字串有一个bug,可能是支持unicode时漏改了。
在Delphi XE版本中已做修改。
ScktComp.pas
发送用Ansi码
function TCustomWinSocket.SendText(const s: AnsiString): Integer;
begin
Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(AnsiChar));
end;
接收用Unicode码
function TCustomWinSocket.ReceiveText: string;
begin
SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;
可以这样来修正它。
1、简单的修改,都用Ansi
直接把function TCustomWinSocket.ReceiveText: string;改成function TCustomWinSocket.ReceiveText: AnsiString;
2、都用Unicode
function TCustomWinSocket.SendText(const s: String): Integer;
begin
Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(Char));
end;
function TCustomWinSocket.ReceiveText: string;
begin
SetLength(Result, ReceiveBuf(Pointer(nil)^, -1) div SizeOf(Char));
SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)*SizeOf(Char)) div SizeOf(Char));
end;
ScktComp.pas是在rtl.bpl,所以无法重编译rtl.dpk。删掉lib下的ScktComp.dcu。如果你的程序不用RuntimePackage编译的化修改没问题,否则没办法,只能改用SendBuffer或SendStream来发送。
相关文章推荐
- Delphi2009的WinSocket元件接收和发送的编码不一致
- 修改单个项目的编码(其他项目导入编码不一致)
- linux mysql 5.7版本修改编码为utf-8
- C#使用HttpWebRequest进行HTTP请求发送和接收的一些小结。(新增修复.NET4.0以下关于cookie的bug)
- 浏览器怎么对接收和发送的数据进行编码的
- PHP处理微信中带Emoji表情的消息发送和接收(Unicode字符转码编码)
- C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全
- httpclient 4.3及以上版本,发送和接收https
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- WinSock中关于阻塞接收/发送超时的一个BUG
- Linux网卡能接收不能发送bug eth0 tx packets:0
- 服务器接收和发送数据时 如何进行编码
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- FFMPEG学习【libavcodec】:发送/接收编码和解码API概述
- Jquery实现发送验证码倒计时功能(无BUG版本)
- stm32 3.5固件库带sdio版本V4.5.0 bug修改
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- Python网络编程——修改套接字发送和接收的缓冲区大小
- 已解决了ajax(源文件编码gb2312)发送+php接收(源文件编码gb2312)中文乱码问题(utf-8也通用)
- Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现【5】消息发送,接收;修改心情的实现