过滤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

posted on 2005-12-15 15:01  昊子  阅读(753)  评论(0编辑  收藏  举报

导航