将字符串放入文本框 - >不完整

时间:2015-08-10 12:07:26

标签: c# stream httpwebresponse

我点击了一个小的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。< / p>

所以看起来字符串没有完全附加到TextBox。为什么会这样?

是的:我正在申请HTML文件;显示的最后两个字符是&#34; .5&#34;,前两个字符缺少的是&#34; 16&#34;,所以它不会在某些特殊字符处中断。

1 个答案:

答案 0 :(得分:1)

查看此https://msdn.microsoft.com/en-us/library/jj170161.aspx

您的问题是,使用Stream.Read,您可能会读取少于字符总数,因为它们可能尚未在网络上提供。

所以你的字符串只包含文本的第一部分。 s.Length表示从字节数组x复制的字符数正确但大多数字符为0(字符'\ 0')。然后textBox2.TextLength指示已读取的正确字符数。我想它会修剪'\ 0'字符。

您应该使用while循环,并检查之前指示的Read结果。

同时检查html页面的编码。对于UTF8(HTML 5中的默认值),一个字节不一定对应于一个字符。

相关问题