Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Send UTF-16 on TCP or TLS Socket

See more Socket/SSL/TLS Examples

Demonstrates how to send a string on a connected TCP or SSL/TLS socket such that it is the utf-16 byte representation that is sent.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.StringBuilder,
  Chilkat.Socket;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  socket: TSocket;
  tls: Boolean;
  maxWaitMs: Integer;
  domainOrIpAddr: string;
  port: Integer;
  sbXml: TStringBuilder;

begin
  success := False;

  //  This example assumes the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  socket := TSocket.Create;

  tls := False;
  maxWaitMs := 20000;
  domainOrIpAddr := 'example.com';
  port := 1234;

  //  Connect to the whatever is expecting our connection...
  success := socket.Connect(domainOrIpAddr,port,tls,maxWaitMs);
  if (success <> True) then
    begin
      WriteLn(socket.LastErrorText);
      Exit;
    end;

  //  Let's say we have an XML file saved in the utf-16 byte representation,
  //  and we want to send it over the connection using the utf-16 byte representation...

  //  First the file into a Chilkat StringBuilder.
  //  Tell the LoadFile method that we are reading utf-16 bytes..
  sbXml := TStringBuilder.Create;
  success := sbXml.LoadFile('qa_data/xml/myUtf16.xml','utf-16');
  if (success <> True) then
    begin
      WriteLn('Failed to load utf-16 XML file..');
      Exit;
    end;

  //  Tell the socket object that we wish to send the utf-16 byte representation of the string.
  socket.StringCharset := 'utf-16';

  //  Send the string as utf-16 bytes.
  success := socket.SendSb(sbXml);
  if (success <> True) then
    begin
      WriteLn(socket.LastErrorText);
      Exit;
    end;

  //  Let's say we wanted to instead send the string as utf-8 bytes.
  //  Just tell the socket object...
  socket.StringCharset := 'utf-8';

  //  Send the string as utf-8 bytes.
  success := socket.SendSb(sbXml);
  if (success <> True) then
    begin
      WriteLn(socket.LastErrorText);
      Exit;
    end;

  //  If our XML file was utf-8, then just tell the StringBuilder that we're reading utf-8.
  //  Once the text is properly contained in the StringBuilder, we can send the contents in any other charset (windows-1252, utf-16, utf-8, etc.) 
  //  as long as it make sense (i.e. we obviously can't send Japanese text using a single-byte charset such as Windows-1252).
  success := sbXml.LoadFile('qa_data/xml/myUtf8.xml','utf-8');
  if (success <> True) then
    begin
      WriteLn('Failed to load utf-8 XML file..');
      Exit;
    end;

  //  Send as utf-16
  socket.StringCharset := 'utf-16';

  //  Send the string as utf-16 bytes.
  success := socket.SendSb(sbXml);
  if (success <> True) then
    begin
      WriteLn(socket.LastErrorText);
      Exit;
    end;

  //  ...
  //  ...


  socket.Free;
  sbXml.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.