我这有个TXT:http://static.yunwd.net/File/SWF/10/10185/1.txt请求后用string是存不了内容的(只能存一小段内容),因为,这个txt里有个很莫名其妙的“截断控制符”,我也是第一次听说,但是就是这个东西导致用了string保存变量后内容丢失。
so,必须用byte[]来保存,但是显示到窗体又不行,因为窗体接受string,所以说我得把那些“截断控制符”过滤掉。好了,有人知道这所谓的“截断控制符”是神马东西了吗?如何过滤呢?

解决方案 »

  1.   

    第一个代码:(用string存,下载下来的内容不完整!)string StrReturn = "";
                WebResponse result = null;            WebRequest req = WebRequest.Create("http://static.yunwd.net/File/SWF/10/10185/1.txt");
                result = req.GetResponse();
                Stream ReceiveStream = result.GetResponseStream();
                Encoding encode = System.Text.Encoding.GetEncoding("GB2312");
                StreamReader sr = new StreamReader(ReceiveStream, encode);
                Char[] read = new Char[256];
                int count = sr.Read(read, 0, 256);
                while (count > 0)
                {
                    String str = new String(read, 0, count);
                    StrReturn += str;
                    count = sr.Read(read, 0, 256);
                }
                MessageBox.Show(StrReturn);第二种方式:(用byte[]存,下载的内容时完整的,但是得转成string前必须把“截断控制符”给过滤掉,我的问题也就是如何过滤“截断控制符”?)
    string a = " ";
                var req = WebRequest.Create("http://static.yunwd.net/File/SWF/10/10185/1.txt");
                var result = req.GetResponse();
                byte[] buffer;
                using (var ReceiveStream = result.GetResponseStream())
                {
                    buffer = new byte[result.ContentLength];
                    int offset = 0;
                    while (offset < buffer.Length)
                    {
                        int read = ReceiveStream.ReadByte();
                        buffer[offset] = (byte)read;
                        offset++;
                    }
                }
                System.IO.FileStream fs = new System.IO.FileStream("2.txt", System.IO.FileMode.OpenOrCreate);  //写入到Bin目录下
                fs.Write(buffer, 0, buffer.Length);
                fs.Close();
      

  2.   

    沉的很快啊今天up  up  up
      

  3.   

    并非截断控制符,而是“\0”, 你可以跟踪一下在VS 中。一开始我看都读取出来了,但是在累加的时候出错,我就看那段了,你可以在Vs里面打个断点,就是在累加那里,看看累加前后差异。
      

  4.   

    0是空字符,也作为字符串结束符...所以后面的字符都会被丢弃,文本就被截断了...ASCII码有128个,包括扩展码255个,其中只有控制符31个...除了0之外还有一些如EM、ESC等控制符可能导致文本被截断...
      

  5.   

    呵呵 其实也挺简单的 我跑断点发现字节为0的就是控制符,我把它过滤掉了 呵呵在vrhero给我的代码里添加下面代码就可以了   谢谢xianfz和vrhero
    if (read == 0)
                        {
                            read = 32;
                        }
      

  6.   

    最简单的方法,把他读入到string[]变量中,然后看下有什么特殊的字符,比如\n之类,排除掉你知道的转意符号,就知道了你的截断符是什么..
      

  7.   

    chr(0) 表示字符串结尾的那个东东
      

  8.   

    估计不行  读到那就截断了  那个字符的ASCII码是0