I got this to responce of my bug raport… and it seems they not expected to support surrogates, so only solution would be either what i meantied use of private use zone or try implment something in C++ as with slate you can control widget rendering on quite low level, but as said below it is more preformance heavy task:
We store our FString characters in 16
bits (Essentially UCS-2), so anything
outside of the Basic Multilingual
Plane will be cut off. You can find
more information on our Character
Encoding page:
Character Encoding in Unreal Engine | Unreal Engine 5.3 DocumentationUnicode does provide a block of
Surrogate codepoints that can be
paired up, so you could detect that a
character is out of bounds, but by
then you’ve lost the second half.
Upping our character type to 32 bits
would double the memory footprint of
text across the board, which
definitely isn’t desirable. UTF-8/16
supports codepoints of varying byte
length, but the performance hit for
decoding it would be untenable. We can
definitely render the Symbols
(http://unicode.org/charts/PDF/U2600.pdf)
block, as long as you use a font that
includes those characters.