如何将 4 字节字符串转换为 unicode 表情符号?

How can I convert a 4-byte string into an unicode emoji?

我在我的 Delphi 10.3 returns 中使用的一个网络服务,一个由这四个字节组成的字符串: F0 9F 99 82 。我期待一个微微微笑的表情符号。 This 站点将此字节序列显示为该表情符号的 UTF-8 表示形式。所以我想我的字符串中有一个 UTF-8 表示,但它是一个实际的 unicode 字符串?我如何将我的字符串转换为实际的 unicode 表示形式,例如,在 TMemo 中显示它?

该角色具有 Unicode code point U+1F642。显示文本是通过编码定义的:如何解释一组字节:

  • in UTF-8一个字符可以由8、16、24或32位组成(1到4个Byte);这个是 $F0 F .
  • UTF-16 one character can consist of 16 or 32 bits (2 or 4 bytes = 1 or 2 Words); this one is $D83D $DE42 (using surrogates).
  • UTF-32中一个字符总是由32位组成(4字节=1CardinalDWord)并且总是等于代码点,即F642.

在Delphi中,您可以使用:

  • TEncoding.UTF8.GetString() 对于 UTF-8
  • (或 TEncoding.Unicode.GetString() 如果你有 UTF-16LE
  • TEncoding.BigEndianUnicode.GetString() 如果你有 UTF-16BE)。

请记住,这只是一个字符,就像文本中的每个字母、符号和空格一样:它可以通过选择来标记(即 Ctrl+A ) 并复制到剪贴板(即 Ctrl+C)。不需要特别照顾。