Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert a hex string to corresponding emoji string

I'm trying to create a string with emoji "👱" starting from this string "D83DDC71". For doing that I'm trying to convert the string above in this string "\uD83D\uDC71".

If i use this code it work (textbox shows 👱 as expected):

textbox.Text += "\uD83D\uDC71";

but if i use this it doesn't work (textbox shows exact text "\uD83D\uDC71" instead of single character):

textbox.Text += sender.Code.ToString("X").insert(4, @"\u").insert(0, @"\u");

What is the right way to convert hex representation of an emoji to a corresponding C# string (UTF-16)?

like image 492
frenk91 Avatar asked Sep 02 '25 18:09

frenk91


2 Answers

Okay. It seems you have a string which gives the hexadecimal of each of the UTF-16 code units of the character U+1F471 (👱).

Since char represents a UTF-16 code unit, split the string into two 4-character chunks, parse that into an int as hexadecimal, cast each to char and then combine them into a string:

var personWithBlondHair = ""
  + (char)int.Parse("D83DDC71".Substring(0, 4), NumberStyles.HexNumber)
  + (char)int.Parse("D83DDC71".Substring(4, 4), NumberStyles.HexNumber);

As per https://dotnetfiddle.net/oTgXfG

like image 141
Jon Hanna Avatar answered Sep 04 '25 08:09

Jon Hanna


You have a string containing two shorts in hexadecimal form, so you need to parse them first. My example uses an overload of Convert.ToInt16 which also accepts an integer specifying the base of the integers in the string which, in our case, is 16 (hexadecimal).

string ParseUnicodeHex(string hex)
{
    var sb = new StringBuilder();
    for (int i = 0; i < hex.Length; i+=4)
    {
        string temp = hex.Substring(i, 4);
        char character = (char)Convert.ToInt16(temp, 16);
        sb.Append(character);
    }
    return sb.ToString();
}

Please note that this method will fail if the string's length isn't divisible by 4.

The reason this works:

textbox.Text += "\uD83D\uDC71";

is because you've got a string literal containing unicode character escape sequences. When you compile your program, the compiler replaces these escape sequences with the correct unicode bytes. This is why you cannot just add \u in front of the characters during execution to make it work.

like image 27
cbr Avatar answered Sep 04 '25 07:09

cbr