首页 > 解决方案 > 如何将 4 字节字符串转换为 unicode 表情符号?

问题描述

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

标签: delphiencoding

解决方案


该字符具有Unicode代码点U+1F642。显示文本是通过编码定义的:必须如何解释一组字节:

  • UTF - 8中,一个字符可以由8、16、24或 32 位(1 到 4Byte秒)组成;这个是$F0 $9F $99 $82
  • UTF - 16中,一个字符可以包含16或 32 位(2 或 4 字节 = 1 或 2Word秒);这个是$D83D $DE42(使用代理)。
  • UTF - 32中,一个字符始终由32位(4 个字节 = 1CardinalDWord)组成,并且始终等于代码点,即$1F642.

在 Delphi 中,您可以使用:

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

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


推荐阅读