0

以下来自 Visual Studio 的 C# Interactive Compiler:

> BitConverter.ToString(Encoding.BigEndianUnicode.GetBytes(""))
"D8-3D-DE-00"
> BitConverter.ToString(Encoding.BigEndianUnicode.GetBytes(""))
"D8-3C-DF-F4"
> BitConverter.ToString(Encoding.BigEndianUnicode.GetBytes(""))
"D8-3D-DE-00-D8-3C-DF-F4-DB-40-DC-67-DB-40-DC-62-DB-40-DC-65-DB-40-DC-6E-DB-40-DC-67-DB-40-DC-7F"

表情符号笑脸的代码单元是预期的代理对 - “D8-3D-DE-00”

表情符号标志的代码单元是预期的代理对 - “D8-3C-DF-F4”

鉴于此,表情符号笑脸后跟表情符号标志的代码单元不应该是 - “D8-3D-DE-00-D8-3C-DF-F4”吗?

4

1 回答 1

2

后者不是一个简单的黑旗表情符号,而是一个表情符号标签序列

旗:英格兰

表情符号含义:英国的国旗,英国的一个国家。可能显示为字母gbeng

国旗:英格兰表情符号是一个标签序列,结合了黑旗、标签拉丁小写字母 G、标签拉丁小写字母 B、标签拉丁小写字母 E、标签拉丁小写字母 N、标签拉丁小写字母 G 和取消标签。这些在支持的平台上显示为单个表情符号。

旗帜:英格兰于 2017 年被添加到 Emoji 5.0。

我以前编写过PowerShell cmdlet Get-CharInfo,这是您的字符串的结果(该列CodePoint包含 Unicode (U+hhhh) 和 UTF-8 字节,该列Description包含一个代理对(如果有)):

 ""      | Get-CharInfo

Char CodePoint                      Category Description
---- ---------                      -------- -----------
   {U+1F600, 0xF0,0x9F,0x98,0x80} So       GRINNING FACE (0xd83d,0xde00)
   {U+1F3F4, 0xF0,0x9F,0x8F,0xB4} So       WAVING BLACK FLAG (0xd83c,0xdff4)
   {U+E0067, 0xF3,0xA0,0x81,0xA7} Cf       TAG LATIN SMALL LETTER G (0xdb40,0xdc67)
   {U+E0062, 0xF3,0xA0,0x81,0xA2} Cf       TAG LATIN SMALL LETTER B (0xdb40,0xdc62)
   {U+E0065, 0xF3,0xA0,0x81,0xA5} Cf       TAG LATIN SMALL LETTER E (0xdb40,0xdc65)
   {U+E006E, 0xF3,0xA0,0x81,0xAE} Cf       TAG LATIN SMALL LETTER N (0xdb40,0xdc6e)
   {U+E0067, 0xF3,0xA0,0x81,0xA7} Cf       TAG LATIN SMALL LETTER G (0xdb40,0xdc67)
   {U+E007F, 0xF3,0xA0,0x81,0xBF} Cf       CANCEL TAG (0xdb40,0xdc7f)
于 2021-04-15T09:43:26.167 回答