我需要以1F600或128512等格式获取表情符号的代码。它现在只是我字符串中的符号。
我发现Uniicode编码中描述的表情符号,但CharUnicodeInfo.GetNumericValue似乎不起作用。
我该怎么做?
确定
var q = CharUnicodeInfo.GetNumericValue(text[0]);
其中text [0]保存表情符号(在调试视图中它只是一张图片) 返回-1
答案 0 :(得分:3)
你说
text[0]
拥有表情符号
事实并非如此。
text[0]
拥有第一个Char
。 Char
是16位代码单元,但表情符号不适合16位代码单元。它们由两个组合字符表示。
第一个组合字符本身不是有效的代码点,因此尝试获取代码点值会返回-1;无效的代码点。
那么如何获得代码点呢?
Return code point of characters in C#解释了如何获取所有代码点的列表。
如果您只想获得第一个代码点,可以直接使用Char.ConvertToUtf32
:
int codepoint = Char.ConvertToUtf32(text, 0)
答案 1 :(得分:0)
CharUnicodeInfo.GetNumericValue为您返回-1的原因是因为您传递的字符不是数字字符。您需要阅读文档。
该块中表情符号的Unicode值是32位值。例如,0x1F600。因此它将是由两个16位值组成的32位值。因此,如果您的字符串包含该表情字符,则字符串将为长度2,并且两个char
值将为0x0001和0xF600。将char
值转换为short
并将其视为十六进制。例如:
short c1 = (short)text[0];
short c2 = (short)text[1];
在调试器中,将c1
和c2
视为十六进制。