为什么C#无法读取类似于人的表情符号?

时间:2019-02-22 16:00:36

标签: c# telegram emoji

我有一个用C#制作的电报机器人,我添加了一个读取表情符号的命令,然后将其发回。它可以与大多数表情符号配合使用,但人类表情符号可能具有多种肤色。但是,我保留了默认的肤色,但是仍然不起作用。有什么想法吗?

编辑:我解释错了。您发送表情符号,程序将其与带有表情符号的常量进行比较,如果相同,则将其发送回去。经过一些测试,我发现问题与性别有关。性别表情符号无效,因为我与之比较的字符串似乎不正确。我尝试使用“表情符号” +“男性符号表情符号”,但仍然无法正常工作。

1 个答案:

答案 0 :(得分:1)

.NET框架中的字符串使用UTF-16存储,UTF-16的大多数字符使用两个字节,其他字符使用两个字节。此外,某些字形(包括表情符号)是多个字符的组合。 Unicode处理复合字符的规则非常复杂,并且经过多年的变化,以至于较旧的文本处理代码在处理某些形式的复合字符时通常会遇到问题。

问题是,在某种程度上,显示字符串需要将其分解为可以单独呈现的片段。如果系统的“单行显示字符串”功能可以理解表情符号的当前规则,但是应用程序的“单词包装框内的显示字符串”功能不能,则该功能可能会意外地将输入字符串细分为复合字符并要求系统分别渲染每个部分;结果是一团糟。

您的问题很可能不是C#本身,而是任何试图显示该消息的问题。复合字符处理是如此复杂,以至于很少有应用程序能够正确处理当前标准所要求的一切,而当今的任何应用程序都不可能正确处理下一版标准所要求的一切。