[技巧]表情输入的特殊处理

前言

在和前同事聊天的时候,他因为在接入翻译,所以问了我一个问题,关于在聊天中加入了表情的翻译处理。这个问题的点在哪里呢?是因为我们一般做聊天表情包的时候,绝大多数的处理都是加入一个特殊字符表示表情的起始关键字符,然后通过一个特殊的规则来匹配表情。但是在翻译的时候,很有可能会把这个表情给翻译成一个单词。通过他的讲解,我发现了其实通过一个小处理就能完美的解决掉它。

正文

转义字符

在接触字符的时候,我们肯定知道字符里有个特殊的字符,它叫转义字符。在ASCII码都可以用“\”加数字来标识的,那这个特殊字符就是“\”。它的含义就是用它来做一个关键字,然后它和后接的数字来表示一个特殊的含义。通过“\”这个字符把它后接的字符的含义给改变了。我们就可以通过定义一个特殊的字符来表示我们的表情。可能会有人问了,这个不就是一个简单的关键字标识嘛,有啥好讲的。

特定环境出现的问题

那后面我就讲一个特殊的环境。如果我们定义\1代表的是一个笑脸。我们在输入的时候,肯定是玩家选择了一个笑脸然后在发给服务器的时候,我们把笑脸替换成\1来发送的,这个是一个简单的表情发送,但是如果玩家输入了一个\1怎么办呢?是不是我们还把它翻译成笑脸呢?微信里就是这样处理的,你发送一个特殊格式的字符它就给你转换成特定的表情了。那如果我们在游戏里表情是到达一个等级或者一个条件开放的。那玩家是不是就这样卡了一个bug。那我们就思考下怎么处理吧。

一种简单的处理

其实处理起来很简单的。我们在玩家输入的"\"之前在加入一个"\"。那玩家在输入的时候就变成了“\1”那我们在做处理的时候,通过"\"后接"\"就翻译成反斜杠的特殊含义,我们就把这个当一个正常的"\"输出,最后在另外一端看到的玩家输出就是"\1"了。这样的处理就正常表示了玩家的输入。

测试代码

static void zhuanyi(string str,List<string> strs)
        {
            if (string.IsNullOrEmpty(str))
            {
                return;
            }
            int index = str.IndexOf('a');
            if (index < 0)
            {
                strs.Add(str);
                return;
            }
            strs.Add(str.Substring(0,index+2));
            zhuanyi(str.Substring(index+2), strs);

        }
        static string zhuanyi1(List<string> strs)
        {
            string str = "";
            for(int i = 0; i < strs.Count; i++)
            {
                int index = strs[i].IndexOf('a');
                if (index > 0)
                {
                    str += strs[i].Substring(0, index);
                    string temp = strs[i].Substring(index + 1);
                    if(temp == "1")
                    {
                        str += "哈哈";
                    }
                    else
                    {
                        str += temp;
                    }
                }
                else
                {
                    string temp = strs[i].Substring(index + 1);
                    if (temp == "1")
                    {
                        str += "哈哈";
                    }
                    else
                    {
                        str += temp;
                    }
                }
            }
            return str;
        }

这就是一个简单的实现,没有优化过

结束

其实这个的处理是一个很简单的转义字符的特殊应用,我们可以在聊天呀,邮件呀,或者一些需要在文字里插入一些特殊含义内容的字符串里的应用。很多时候我们一些知道的知识点在应用的时候想不到。其实很大的一部分是我们只是把概念当成了概念,而没有转换成我们的智慧。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注