获取表情符号(字符)unicode代码

时间:2016-07-24 17:40:15

标签: c#

我需要以1F600或128512等格式获取表情符号的代码。它现在只是我字符串中的符号。

我发现Uniicode编码中描述的表情符号,但CharUnicodeInfo.GetNumericValue似乎不起作用。

我该怎么做?

确定

var q = CharUnicodeInfo.GetNumericValue(text[0]);

其中text [0]保存表情符号(在调试视图中它只是一张图片) 返回-1

2 个答案:

答案 0 :(得分:3)

你说

  

text[0]拥有表情符号

事实并非如此。

text[0]拥有第一个CharChar是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];

在调试器中,将c1c2视为十六进制。