比较 UTF-16 中的性别表情符号

Comparing gender emojis in UTF-16

我制作了一个读取输入字符串的程序,比较它以检查它是否是特定的表情符号,returns 一个数字取决于它是哪个表情符号。

问题来自不同类型的表情符号。例如,警察表情符号未被检测到。我尝试将字符串与“‍”进行比较,但未检测到。我试过加男符号,和字符串“‍♂️♂️”比较,也没用。

我的一段代码代码示例:

                case "":
                case "":
                    Send(args[1] + " 70%", update.Message.Chat.Id);
                    break;
                case "":
                case "":
                case "":
                case "":
                    Send(args[1] + " 40%", update.Message.Chat.Id);
                    break;

他们都工作,除了 和 ,恰好是不同性别的人。

不确定这是否重要,但语言是 C#,我在 Visual Studio 中编程,这让我可以在其中复制和粘贴表情符号。

我做错了什么?

I tried comparing the string with "‍", but it wasn't detected.

上面的这个警察表情符号由两个 Unicode "Characters" 组成,更好地称为代码点:警察 U+1F46E 和一个字符修饰符 U+200D(组合上面的 4 个点)。如果在案例陈述中你只有警察 U+1F46E 那么它就不会被找到。

您必须确保您在代码中粘贴的表情符号与您在输入字符串中收到的表情符号相同。仅仅显示字符串会造成混淆,因为它们看起来相等但实际上并不相等。

在源代码中,我会将 ‍ 作为注释,在案例陈述的字符串中,警察使用代码点转义“\U0001F46E”。

case "\U0001F46E":        // ‍
case "\U0001F46E\u200D":  // ‍ + ....

或者

const string PoliceOfficer = "\U0001F46E" // ‍
...
case PoliceOfficer: 

注意不同的转义,上部 \U 表示 8 个十六进制数字,下部 \u 表示 4 个十六进制数字。 然后,当您不认识某个字符串时,只需将其打印出来(最终在调试器中),获得构建字符串的正确转义并将其添加到 case 语句中。

作为替代方案,您可以先从输入字符串中删除所有组合标记,例如“\u200D”,然后将其传递给 case 语句。然后最终赋予组合字符额外的含义。