Вы можете использовать класс Indy TIdEncoderMIME
для кодирования данных String
, TStream
и TIdByte
в base64 (и TIdDecoderMIME
для декодирования из base64 обратно в String
, TStream
или TIdBytes
), например:
s := TIdEncoderMIME.EncodeBytes(data);
Что касается отправки AnsiString
данных, Indy в D2009 + просто не имеет никаких перегрузок TIdIOHandler.Write()
для обработки AnsiString
данных вообще, только UnicodeString
данных.Чтобы отправить AnsiString
как есть, вы можете:
1) скопировать AnsiString
в TIdBytes
, используя RawToBytes()
, а затем позвонить TIdIOHandler.Write(TIdBytes)
:
var
as: AnsiString;
begin
as := ...;
AContext.Connection.IOHandler.Write(RawToBytes(as[1], Length(as)));
end;
2) скопируйте данные AnsiString
в TStream
и затем позвоните TIdIOHandler.Write(TStream)
:
var
as: AnsiString;
strm: TStream;
begin
strm := TMemoryStream.Create;
try
strm.WriteBuffer(as[1], Length(as));
AContext.Connection.IOHandler.Write(strm);
finally
strm.Free;
end;
end;
или:
var
as: AnsiString;
strm: TStream;
begin
as := ...;
strm := TIdMemoryBufferStream.Create(as[1], Length(as));
try
AContext.Connection.IOHandler.Write(strm);
finally
strm.Free;
end;
end;