emoji - 比较 UTF-16 中的性别表情符号
问题描述
我制作了一个程序,它读取输入字符串,比较它以检查它是否是某个表情符号,并根据它是哪个表情符号返回一个数字。
问题来自不同类型的表情符号。例如,警察表情符号不会被检测到。我尝试将字符串与“”进行比较,但未检测到。我尝试添加男性符号并将字符串与“♂️♂️”进行比较,但它也不起作用。
我的一段代码示例:
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 中编程,这让我可以将表情符号复制并粘贴到那里。
我究竟做错了什么?
解决方案
我尝试将字符串与“”进行比较,但未检测到。
上面的这个警察表情符号由两个 Unicode“字符”组成,更好地称为代码点:警官 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 语句。然后最终赋予组合字符附加的含义。
推荐阅读
- react-native - 图标不显示
- python - 根据日期和时间条件熊猫数据框删除行
- xcode - Xcode 错误 - OpenFrameworks 示例项目给出“使用未声明的标识符错误”
- .net - WCF NetNamedPipeBinding - Same pipe name and different users
- javascript - 想在 react js 的类组件中使用切换器功能?
- kql - 如何在 KQL 中将主机字节顺序 IP 地址转换为 ASCII IP xxxx
- html - 为什么设置填充使两个水平 div 垂直?
- javascript - 即使页面放大并重新加载后,窗口高度和文档高度也是相同的。垂直滚动条可见
- python - 根据 Pandas 中的两个第一列合并具有不同行数的列
- javascript - 创建触发器 VS 后端查询、性能和资源