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