delphi7开发的服务端接收delphi10.4.2开发的安卓端的中文数据显示乱码
时间: 2024-03-11 20:44:07 浏览: 16
这个问题很可能是因为编码不一致导致的。Delphi 7 默认使用的是 ANSI 编码,而 Delphi 10.4.2 默认使用的是 Unicode 编码。因此,当 Delphi 7 的服务端接收来自 Delphi 10.4.2 安卓端的中文数据时,可能会出现乱码问题。
解决方案是将 Delphi 7 服务端的代码改为使用 Unicode 编码。具体做法是:在 Delphi 7 中,将所有使用 AnsiString 声明的变量和函数改为使用 UnicodeString 声明。例如,将 AnsiString 改为 UnicodeString,将 PAnsiChar 改为 PWideChar,将 AnsiUpperCase 改为 UpperCase 等等。这样,Delphi 7 的服务端就能够正确地处理来自 Delphi 10.4.2 安卓端的中文数据了。
相关问题
delphi7服务器端与delphi10.4.2安卓端TSocket通信的实例代码
以下是一个简单的 Delphi7 服务器端和 Delphi10.4.2 安卓端 TSocket 通信的实例代码:
Delphi7 服务器端:
```delphi
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
btnStart: TButton;
Memo1: TMemo;
procedure btnStartClick(Sender: TObject);
private
{ Private declarations }
FServerSocket: TServerSocket;
procedure OnClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnStartClick(Sender: TObject);
begin
Memo1.Lines.Add('Starting server...');
FServerSocket := TServerSocket.Create(nil);
FServerSocket.OnClientConnect := OnClientConnect;
FServerSocket.Port := 1234;
FServerSocket.Active := True;
Memo1.Lines.Add('Server started.');
end;
procedure TForm1.OnClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Client connected.');
Socket.OnRead := OnClientRead;
end;
procedure TForm1.OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
Str: string;
begin
Str := Socket.ReceiveText;
Memo1.Lines.Add('Received: ' + Str);
Socket.SendText('Hello from server');
end;
end.
```
Delphi10.4.2 客户端:
```delphi
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
System.Win.ScktComp, FMX.Layouts, FMX.Memo, FMX.StdCtrls;
type
TForm1 = class(TForm)
btnConnect: TButton;
btnSend: TButton;
edtIP: TEdit;
edtPort: TEdit;
edtMessage: TEdit;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure btnConnectClick(Sender: TObject);
procedure btnSendClick(Sender: TObject);
private
{ Private declarations }
FSocket: TClientSocket;
procedure OnSocketRead(Sender: TObject; Socket: TCustomWinSocket);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.btnConnectClick(Sender: TObject);
begin
Memo1.Lines.Add('Connecting...');
FSocket := TClientSocket.Create(nil);
FSocket.OnRead := OnSocketRead;
FSocket.Host := edtIP.Text;
FSocket.Port := StrToInt(edtPort.Text);
FSocket.Open;
end;
procedure TForm1.btnSendClick(Sender: TObject);
begin
if Assigned(FSocket) then
begin
FSocket.Socket.SendText(edtMessage.Text);
Memo1.Lines.Add('Sending: ' + edtMessage.Text);
end;
end;
procedure TForm1.OnSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
Str: string;
begin
Str := Socket.ReceiveText;
Memo1.Lines.Add('Received: ' + Str);
end;
end.
```
该代码实现了一个简单的服务器-客户端通信,当客户端连接到服务器时,服务器会触发 OnClientConnect 事件,当客户端向服务器发送数据时,服务器会触发 OnClientRead 事件并将收到的数据发送回客户端。客户端通过编辑 IP 地址、端口和消息文本框来连接到服务器,发送数据并接收响应。当客户端收到数据时,OnSocketRead 事件将被触发,并将收到的数据添加到 Memo1 控件中。
delphi 10.4.2安卓端TSocket的实例代码
以下是一个基本的 Delphi 10.4.2 安卓端 TSocket 的实例代码:
```delphi
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, System.Win.ScktComp,
FMX.Layouts, FMX.Memo, FMX.StdCtrls;
type
TForm1 = class(TForm)
btnConnect: TButton;
btnSend: TButton;
edtIP: TEdit;
edtPort: TEdit;
edtMessage: TEdit;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure btnConnectClick(Sender: TObject);
procedure btnSendClick(Sender: TObject);
private
{ Private declarations }
FSocket: TClientSocket;
procedure OnSocketRead(Sender: TObject; Socket: TCustomWinSocket);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.btnConnectClick(Sender: TObject);
begin
Memo1.Lines.Add('Connecting...');
FSocket := TClientSocket.Create(nil);
FSocket.OnRead := OnSocketRead;
FSocket.Host := edtIP.Text;
FSocket.Port := StrToInt(edtPort.Text);
FSocket.Open;
end;
procedure TForm1.btnSendClick(Sender: TObject);
begin
if Assigned(FSocket) then
begin
FSocket.Socket.SendText(edtMessage.Text);
Memo1.Lines.Add('Sending: ' + edtMessage.Text);
end;
end;
procedure TForm1.OnSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
Str: string;
begin
Str := Socket.ReceiveText;
Memo1.Lines.Add('Received: ' + Str);
end;
end.
```
该代码创建了一个包含连接、发送和接收数据的简单客户端应用程序。用户可以通过编辑 IP 地址、端口和消息文本框来连接到指定的服务器,发送数据并接收响应。当客户端收到数据时,OnSocketRead 事件将被触发,并将收到的数据添加到 Memo1 控件中。