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发送的就显示乱码,请问各位大侠应该怎么处理,谢谢。
...全文
363 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);

1,593

社区成员

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

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