C# 获取表情符号';s(字符)unicode代码

C# 获取表情符号';s(字符)unicode代码,c#,C#,我需要得到像1F600或128512格式的表情符号的代码。现在它只是我字符串中的一个符号 我发现表情符号是用Uniicode编码的,但是CharUnicodeInfo.GetNumericValue似乎不起作用 我该怎么做 嗯 文本[0]包含表情符号的位置(在调试视图中,它只是一张图片) 返回-1返回-1的原因是您传递的字符不是数字字符。您需要阅读文档 该块中表情符号的Unicode值是32位值。例如,0x1F600。所以它将是一个由两个16位值组成的32位值。因此,如果您的字符串包含该表情符号

我需要得到像1F600或128512格式的表情符号的代码。现在它只是我字符串中的一个符号

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

我该怎么做

文本[0]包含表情符号的位置(在调试视图中,它只是一张图片) 返回-1

返回-1的原因是您传递的字符不是数字字符。您需要阅读文档

该块中表情符号的Unicode值是32位值。例如,0x1F600。所以它将是一个由两个16位值组成的32位值。因此,如果您的字符串包含该表情符号,则该字符串的长度为2,两个
char
值分别为0x0001和0xF600。将
char
值强制转换为
short
并将其视为十六进制。例如:

short c1 = (short)text[0];
short c2 = (short)text[1];
在调试器中,将
c1
c2
视为十六进制。

返回-1的原因是您传递的字符不是数字字符。您需要阅读文档

该块中表情符号的Unicode值是32位值。例如,0x1F600。所以它将是一个由两个16位值组成的32位值。因此,如果您的字符串包含该表情符号,则该字符串的长度为2,两个
char
值分别为0x0001和0xF600。将
char
值强制转换为
short
并将其视为十六进制。例如:

short c1 = (short)text[0];
short c2 = (short)text[1];
在调试器中,将
c1
c2
视为十六进制

文本[0]
保留表情符号

事实并非如此

text[0]
保存第一个
Char
Char
是一个16位代码单元,但表情符号不适合16位代码单元。它们由两个组合字符表示

第一个组合字符本身不是有效的代码点,因此尝试获取代码点值时返回-1;无效的代码点

那么,如何获得代码点呢

解释如何获取所有代码点的列表

如果只想获取第一个代码点,可以直接使用
Char.ConvertToUtf32

int codepoint = Char.ConvertToUtf32(text, 0)
你说

文本[0]
保留表情符号

事实并非如此

text[0]
保存第一个
Char
Char
是一个16位代码单元,但表情符号不适合16位代码单元。它们由两个组合字符表示

第一个组合字符本身不是有效的代码点,因此尝试获取代码点值时返回-1;无效的代码点

那么,如何获得代码点呢

解释如何获取所有代码点的列表

如果只想获取第一个代码点,可以直接使用
Char.ConvertToUtf32

int codepoint = Char.ConvertToUtf32(text, 0)

“似乎不起作用”?请阅读并发布一篇文章,我们可以帮助你。也许有你想要的信息?我需要一种通过表情符号获取代码的方法,而不是通过代码获取表情符号。但不管怎样,谢谢你。那也许是相关的?您应该在堆栈溢出中搜索“unicode表情”。这里有很多关于双向转换的好信息。我用“c#”标记进行了快速搜索,但没有找到符合条件的答案。你给了我一个链接,让我用android代码回答“似乎不工作”?请阅读并发布一篇文章,我们可以帮助你。也许有你想要的信息?我需要一种通过表情符号获取代码的方法,而不是通过代码获取表情符号。但不管怎样,谢谢你。那也许是相关的?您应该在堆栈溢出中搜索“unicode表情”。这里有很多关于双向转换的好信息。我用“c#”标记进行了快速搜索,但没有找到符合条件的答案。你给了我用android代码回答的链接。文本变量中显示的第一个表情符号是🗿;。在运行代码c1=-10179、c2=-8705:С@Occam'schainsaw之后:正如我所说,您没有显示十六进制值。十进制数128511计算为0x0001F5FF。十进制数128511计算为0x0001F5FF。我同意。但我得到的是负数,与128511不太接近。或者我误解了什么?文本变量中显示的第一个表情符号是🗿;。在运行代码c1=-10179、c2=-8705:С@Occam'schainsaw之后:正如我所说,您没有显示十六进制值。十进制数128511计算为0x0001F5FF。十进制数128511计算为0x0001F5FF。我同意。但我得到的是负数,与128511不太接近。或者我误解了什么?非常感谢。不过,我还需要阅读更多关于这些代码点的内容。转换为utf32工作得很好。再次感谢。@Occam'schainsaw:从这里开始:非常感谢。不过,我还需要阅读更多关于这些代码点的内容。转换为utf32工作得很好。再次感谢。@Occam'schainsaw:从这里开始: