byte[] buffer=new byte[Client.ReceiveBufferSize];
            
this.isActive = true;
            
while (Client.GetStream().Read(buffer,0,buffer.Length) != 0)
            {
                string Data
=System.Text.Encoding.Default.GetString(buffer);
                
int i=0;  //0为有效,1为1b后面的字符,2为无效
                string Data2="";
直接获取缓冲转换成string 会获得一些意外的惊喜
[2;37;0m
这就是ansi的颜色代码,

"["的ascii分别为 16进制1B、10进制27  和16进制5b、10进制91

原来的想法是遍历每个字符,过滤掉ansi

//                foreach(char c in Data.ToCharArray())
//                {
//                    if(c==(char)27)   // 1Bh 27o ''
//                    {
//                        i=1;
//                        continue;
//                    }
//                    if(i==1&&c==(char)91)    //5bh 91o ''
//                    {
//                        i=2;
//                        continue;
//                    }
//                    if(i==2)
//                        if(c==(char)109)        //36h 109o 'm'
//                        {
//                            i=0;
//                            continue;
//                        }
//                        else 
//                            continue;
//                    Data2=Data2+c;
//                }

可是效率低得受不了,于是想到Regex.Replace()

    Data2 = Regex.Replace(Data,@"\[[\d]{1,2}(;[\d]{1,2}){0,2}m","");

 果然不一般。

最近还得研究研究Trigger,用Regex应该很容易,不过Zmud用的不是标准Regex,还要写个好算法转换

Just so so

相关文章:

  • 2022-02-06
  • 2021-07-19
  • 2021-04-14
  • 2021-12-29
  • 2021-11-29
  • 2022-01-01
猜你喜欢
  • 2021-12-17
  • 2021-08-13
  • 2022-12-23
  • 2022-01-07
  • 2021-08-09
  • 2022-01-09
相关资源
相似解决方案