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