以下来自Visual Studio的C#交互式编译器:
> 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";?
后者不是简单的黑色标志表情符号,而是表情符号标记序列:
🏴旗帜:英格兰
表情符号的意思是:英国的国旗,英国的一个国家。可以显示为字母
gbeng
。旗帜:英格兰表情符号是一个标签序列组合🏴黑旗,标记拉丁文小写字母G,标记拉丁文小写字母B,标记拉丁文小写字母E,标记拉丁文小写字母N,标记拉丁文小写字母G和取消标记。这些显示为支持的单个表情符号平台。
标志:英格兰于2017年加入表情符号5.0。
我以前编写过PowerShellcmdletGet-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)