【问题标题】:Get emoticon's (chars) unicode code获取表情符号(字符)的 unicode 代码
【发布时间】:2016-07-24 17:40:14
【问题描述】:

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

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

我该怎么做?

好的

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

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

【问题讨论】:

  • “好像不行”?请阅读How to Ask 并发布minimal reproducible example,以便我们为您提供帮助。
  • 也许en.wikipedia.org/wiki/Emoticons_(Unicode_block) 有您正在寻找的信息?
  • 我需要一种通过表情符号获取代码的方法,而不是通过代码获取表情符号。但无论如何,谢谢。
  • 那么也许stackoverflow.com/questions/20689645/… 是相关的?您应该在 Stack Overflow 上搜索“unicode emoticon”。有很多有用的信息可用于双向转换。
  • 我通过“c#”标签进行了快速搜索,但没有找到符合条件的答案。你给了我用安卓代码回答的链接。

标签: c#


【解决方案1】:

你说

text[0] 持有表情

这不是真的。

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

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

那么如何获得代码点?

Return code point of characters in C# 解释了如何获取所有代码点的列表。

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

int codepoint = Char.ConvertToUtf32(text, 0)

【讨论】:

  • 非常感谢。但是,必须阅读有关这些代码点的更多信息。转换为 utf32 效果很好。再次感谢。
  • @Occam'schainsaw:从这里开始:joelonsoftware.com/articles/Unicode.html
【解决方案2】:

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 视为十六进制。

【讨论】:

  • 文本变量中显示的第一个表情符号是 🗿。运行代码后 c1 = -10179, c2 = -8705 :С
  • @Occam'schainsaw:正如我所说,您没有显示十六进制值。十进制数 128511 等于 0x0001F5FF。
  • 十进制数 128511 等于 0x0001F5FF。我同意。但我得到的负数甚至不接近 128511。或者我误解了什么?
猜你喜欢
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2017-05-27
  • 1970-01-01
相关资源
最近更新 更多