过滤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 会获得一些意外的惊喜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="";
[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;
// }
// {
// 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