我们正在尝试使用Emoji One和Unity与TextMeshPro添加表情符号。我们有一个窗口打开,显示所有的表情符号,然后用户可以选择他们想要的那个,我们遇到了删除它们并在它们之后键入文本的问题。
以下是我们拥有的代码,精灵的名称是:1f609
,但是当我们运行代码并将其添加到输入字段时的输出是:\ud83d\ude09
string name = _image.sprite.name;
int hexNumber = int.Parse(name, System.Globalization.NumberStyles.HexNumber);
string c = char.ConvertFromUtf32(hexNumber);
_inputField.text += c;
预期的结果是我们应该只看到一个unicode字符(我认为),以便我们可以使用退格键正确删除表情符号,当您输入表情符号时,它不会创建两个要删除的字符并且它不会将字符放在两个表情符号之间,因此当我们输入文本时它会中断。
现在,如果我们删除文字,它会给我们留下空方格,如果我们之后通过在框中输入来添加文字,它会将字符分成两部分来打破它们。
答案 0 :(得分:1)
C#world中的Unicode意味着UTF-16,因此有这些"代理对"你现在必须处理。一种解决方案是检测您是否只删除了代理对的一半,并且在这种情况下也移除了另一半。代理对的前半部分始终在[D800h,DBFFh]范围内,后半部分始终在[DC00h,DFFFh]范围内,因此当您删除其中一个范围内的char
时,您知道应该删除一个更多的char,你也知道char的位置(在刚删除之前或之后)。