DELPHI XE7 UDP发送中文命令乱码

FOREST169 2019-08-13 06:49:55
DELPHI7的代码:
PROCEDURE SENDCMDTOSCREEN( CONST P :INTEGER; CONST S :STRING);
VAR
SIP, S1 :STRING;
CH :ANSISTRING;
UDPClient: TIdUDPClient;
BEGIN
SIP := LINEPLC[P].SIP;
CH := S;
UDPClient := TIdUDPClient.Create( nil);
UDPClient.Host := SIP;
UDPClient.Port := 8869;
UDPClient.ReceiveTimeout := 50;
UDPClient.Send( CH);
SLEEP( 80);
UDPClient.Active := FALSE;
UDPClient.Free;
END;


DELPHI XE7的代码:
PROCEDURE SENDCMDTOSCREEN( CONST P :INTEGER; CONST S :STRING);
VAR
SIP, S1 :STRING;
CH :ANSISTRING;
UDPClient: TIdUDPClient;
BEGIN
SIP := LINEPLC[P].SIP;

CH := UTF8TOANSI( S); //只有这个地方不同

UDPClient := TIdUDPClient.Create( nil);
UDPClient.Host := SIP;
UDPClient.Port := 8869;
UDPClient.ReceiveTimeout := 50;
UDPClient.Send( CH);
SLEEP( 80);
UDPClient.Active := FALSE;
UDPClient.Free;
END;

给同一个服务端发送命令,DELPHI7显示正常,但XE7发送的就显示乱码,请问各位大侠应该怎么处理,谢谢。
...全文
509 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
FOREST169 2019-08-14
  • 打赏
  • 举报
回复 1
UDPClient.Send( S, IndyTextEncoding_OSDefault); 用这个方法可以直接发送ANSI编码。 谢谢两位。
lao_yunger 2019-08-14
  • 打赏
  • 举报
回复
procedure TIdUDPClient.Send(const AData: string; AByteEncoding: IIdTextEncoding = nil
{$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF}
);
begin
Send(Host, Port, AData, AByteEncoding{$IFDEF STRING_IS_ANSI}, ASrcEncoding{$ENDIF});
end;

发送方adata:string, 就是你d7下的ANSISTRING;var CH :ANSISTRING; 这一句本身就对了;下面也不用转换编码。接受方也应当是ANSISTRING类型的字符串
BlueStorm 2019-08-13
  • 打赏
  • 举报
回复
更正] 删除 CH := UTF8TOANSI( S); 这一行 UDPClient.Send( CH); 改为 UDPClient.Send( S, IndyTextEncoding_OSDefault); 这样,接收方收到的是ansi字符串
BlueStorm 2019-08-13
  • 打赏
  • 举报
回复
[更正] 删除 CH := UTF8TOANSI( S); 这一行 UDPClient.Send( CH); 改为 UDPClient.Send( CH, IndyTextEncoding_OSDefault); 这样,接收方收到的是ansi字符串
BlueStorm 2019-08-13
  • 打赏
  • 举报
回复
CH := UTF8TOANSI( S); 改为 CH := AnsiString( S);
重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧