Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t获取编码-错误:“0”&引用;不是受支持的编码名称_C#_Httpwebrequest - Fatal编程技术网

C# Can';t获取编码-错误:“0”&引用;不是受支持的编码名称

C# Can';t获取编码-错误:“0”&引用;不是受支持的编码名称,c#,httpwebrequest,C#,Httpwebrequest,我想从网站获取html使用httpwebrequest。但与一些网站有错误“是不支持的编码名称”。这是我的代码c#,谢谢 string url = textBox1.Text; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode == Ht

我想从网站获取html使用httpwebrequest。但与一些网站有错误“是不支持的编码名称”。这是我的代码c#,谢谢

string url = textBox1.Text;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
    Stream receiveStream = response.GetResponseStream();
    StreamReader readStream = null;

    if (response.CharacterSet == null)
    {
        readStream = new StreamReader(receiveStream);
    }
    else
    {

        readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
    }

    string data = readStream.ReadToEnd();
    webBrowser1.Size = new System.Drawing.Size(0, 0);
    htmlview.Size = new System.Drawing.Size(800, 410);
    htmlview.Location = new Point(0, 3);
    htmlview.Margin = new Padding(3);

    htmlview.Text = data;
    response.Close();
    readStream.Close();
}

很可能是由于编码名称无效/不受支持而发生错误。有关更多信息,请参阅

避免此类异常的一个可能解决方案是在创建StreamReader之前检查
response.CharacterSet
是否是有效的编码名称

以下是您的代码的修改版本:

            ...

            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream receiveStream = response.GetResponseStream();
                var encodingInfoNotFound = string.IsNullOrEmpty(response.CharacterSet) || !Encoding.GetEncodings().Any(e => e.Name == response.CharacterSet);
                var readStream = encodingInfoNotFound ? new StreamReader(receiveStream) : new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));

                string data = readStream.ReadToEnd();
                ...
            }

希望有帮助。

从您的错误消息中,我推断
response.CharacterSet
为空。您能帮我修复它吗?您能使用UTF-8之类的默认编码吗?或者您根本不知道客户端传递给您的是什么吗?请尝试
if(string.IsNullOrEmpty(response.CharacterSet))
tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:tks you:t?