将字符串放入文本框 -> 不完整
Put string into textbox -> not complete
我点击了一个小型 WinForms 应用程序进行测试。它有两个多行文本框和一个按钮,在按下时向服务器发送请求并将响应 headers 和内容发布到文本框中,如下所示:
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
,并且 headers 文本框包含行 Content-length=7653
.
所以看起来字符串没有完全附加到文本框。为什么会这样?
顺便说一句:我正在请求一份 HTML 文件;显示的最后两个字符是“.5”,缺少的前两个字符是“16”,因此它不会在某些特殊字符处中断。
看看这个Post
您的问题是,使用 Stream.Read 您可能阅读的字符数少于总字符数,因为它们可能尚未在网络上可用。
所以您的字符串已经只包含文本的第一部分。 s.Length 表示从字节数组 x 复制过来的正确字符数,但大多数字符为 0 (Char '\0')。 textBox2.TextLength 然后表示已阅读的正确字符数。我想它会修剪 '\0' 字符。
您应该改用 while 循环并检查 Read 的结果,如前所述。
同时检查 html 页面的编码。对于UTF8(HTML 5中的默认值)一个字节不一定对应一个字符。
我点击了一个小型 WinForms 应用程序进行测试。它有两个多行文本框和一个按钮,在按下时向服务器发送请求并将响应 headers 和内容发布到文本框中,如下所示:
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
,并且 headers 文本框包含行 Content-length=7653
.
所以看起来字符串没有完全附加到文本框。为什么会这样?
顺便说一句:我正在请求一份 HTML 文件;显示的最后两个字符是“.5”,缺少的前两个字符是“16”,因此它不会在某些特殊字符处中断。
看看这个Post
您的问题是,使用 Stream.Read 您可能阅读的字符数少于总字符数,因为它们可能尚未在网络上可用。
所以您的字符串已经只包含文本的第一部分。 s.Length 表示从字节数组 x 复制过来的正确字符数,但大多数字符为 0 (Char '\0')。 textBox2.TextLength 然后表示已阅读的正确字符数。我想它会修剪 '\0' 字符。
您应该改用 while 循环并检查 Read 的结果,如前所述。
同时检查 html 页面的编码。对于UTF8(HTML 5中的默认值)一个字节不一定对应一个字符。