我点击了一个小的WinForms应用程序进行测试。它有两个多行文本框和一个按钮,按下后向服务器发送请求,并将响应头和内容发送到文本框中,如下所示:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
int len = 0;
foreach (var header in response.Headers)
{
var str = header.ToString();
textBox1.AppendText(str + "=" + response.Headers[str] + "n");
if (str == "Content-Length") len = Convert.ToInt32(response.Headers[str]);
}
Stream respStream = response.GetResponseStream();
byte[] x = new byte[len];
respStream.Read(x, 0, len);
var s = new string(ascii.GetChars(x, 0, len));
// textBox2.Text = s;
textBox2.Clear();
textBox2.AppendText(s);
MessageBox.Show(textBox2.TextLength.ToString(), s.Length.ToString());
但是无论我是否使用AppendText或是否分配字符串,MessageBox总是显示标题7653
与消息3964
,并且标题文本框包含行Content-length=7653
。
所以似乎字符串没有完全附加到TextBox。为什么会这样?
Btw:我正在请求一个HTML文档;显示的最后两个字符是"。
查看这篇文章
你的问题是流。您可能会读取少于总字符数的字符,因为它们可能在网络上还不可用。
所以你的字符串已经只包含了文本的第一部分。s.Length表示从字节数组x复制过来的正确字符数,但大多数字符都是0 (Char ' ')。textBox2。然后TextLength指示已读取的正确字符数。我想它会修剪' '字符。
应该使用while循环,并按照前面的指示检查Read的结果。
还要检查html页面的编码。对于UTF8 (HTML 5的默认值),一个字节不一定对应一个字符。