过滤ANSI颜色代码

             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 会获得一些意外的惊喜

这就是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

你可能感兴趣的:(代码)