Search code examples
delphiunicodeutf-8emojivcl

Delphi: Displaying Unicode emoji \xF0\x9F\x99\x8A 🙊 from SQL chat database in TMemo


I get strings with Unicode emojis like

$F09F998A

or

$F0 $9F $99 $8A

or

\xF0\x9F\x99\x8A

-> 🙊 from an SQL database.

s1 := '$F09F998A'; // From Database
s2 := '$F0 $9F $99 $8A'; // From Database
s3 := '\xF0\x9F\x99\x8A'; // From Database

How do I convert s1,s2,s3 to display as 🙊 in e.g., a TMemo element?

How do I convert s1,s2 or s3?

// Memo1.lines.add('how to convert ' + ????? -> $F0 $9F $99 $8A );

Memo1.lines.add('how to convert ' + s1 + s2 + c3 + ' as Emoji?');

I want convert < s := '\xF0\x9F\x99\x8A'; > to add to a Memo field to show as Emoji.

function convert_as_Emoji(s: string):string;
begin
  result := ???
end;

and then

var s : string;

s := '\xF0\x9F\x99\x8A'; 

Memo1.lines.add(convert_as_Emoji(s));

Solution

  • Now I do this with success:

    In UTF-8, 🙊 is bytes $F0 $9F $99 $8A – Remy Lebeau

    procedure TForm1.Button1Click(Sender: TObject);
    var
      bytes: array[0..3] of byte;
      str: string;
    const emoji = '$F0$9F$99$8A';  //  🙊
    begin
      bytes[0] := strtoint('$F0'); // bytes[0] := $F0;
      bytes[1] := strtoint('$9F'); // bytes[1] := $9F;
      bytes[2] := strtoint('$99'); // bytes[2] := $99;
      bytes[3] := strtoint('$8A'); // bytes[3] := $8A;
    
      str := TEncoding.UTF8.GetString(bytes);
      showmessage(str);
    end;