【问题标题】:HttpWebRequest StreamReader fails with utf-8 is not a supported encoding name errorHttpWebRequest StreamReader 失败,出现 utf-8 is not a supported encoding name 错误
【发布时间】:2020-08-08 05:06:22
【问题描述】:

我正在使用以下代码从网页中检索数据。它适用于大多数页面,但在某些页面中会引发错误,如下所示;

    String url = @"https://m.facebook.com";
    try
    {
        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();
            response.Close();
            readStream.Close();

        }
    }
    catch (Exception ex)
    { 
    // utf-8 is not a supported encoding name error
    }

如何解决这个问题?这里的其他帖子并没有解决我的问题。

【问题讨论】:

    标签: c# encoding utf-8 streamreader


    【解决方案1】:

    这里的错误是response.CharacterSet 正在返回"utf-8"。方法Encoding.GetEncoding 不知道这意味着什么,因为文本周围的引号。所以你必须把它们去掉。

    替换这一行:

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

    用这个:

    readStream = new StreamReader(receiveStream, 
        Encoding.GetEncoding(response.CharacterSet.Replace("\"", string.Empty)));
    

    【讨论】:

    • 感谢安迪,它工作并给了我 html 源代码,但是 html 内容与我从 chrome 浏览器获得的源代码略有不同>.view 页面源代码。有什么想法吗?
    • @nawala 这是另一个问题。猜测您正在比较由 JS 脚本更改的 Inspector 代码与普通下载的源代码。请注意,页面加载后,JS 可以对其进行显着更改。
    猜你喜欢
    • 2023-03-21
    • 2016-09-20
    • 2019-12-16
    • 2015-11-11
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多