我遇到了编码问题。当我获取网站的源代码时,出现以下情况:
![enter image description here](https://istack.dev59.com/gygsX.webp)
我这样设置编码为UTF8:
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string sourceCode = reader.ReadToEnd();
感谢您的帮助!
我遇到了编码问题。当我获取网站的源代码时,出现以下情况:
我这样设置编码为UTF8:
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string sourceCode = reader.ReadToEnd();
尝试使用指定的编码方式:
Encoding encoding;
try
{
encoding = Encoding.GetEncoding(response.CharacterSet);
}
catch (ArgumentException)
{
// Cannot determine encoding, use dafault
encoding = Encoding.UTF8;
}
StreamReader reader = new StreamReader(response.GetResponseStream(), encoding);
string sourceCode = reader.ReadToEnd();
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
在检索请求的响应之前,您需要使用以下代码。
rqst.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
因为一旦我们使用了"accept-encoding 'gzip'或'deflate'",数据就会被压缩并转化成我们无法阅读的数据,所以我们需要对它们进行解压。
但是响应可能不是UTF-8编码的。您是否检查了响应对象的CharacterSet和ContentType属性,以确保使用正确的编码方式?
无论如何,这两个字符看起来像代码页437中的值为03和08的字符。在您的数据流中似乎有一些二进制数据。
我建议您在调试时使用Stream.Read将响应的前几个字节读入一个字节数组中,然后检查值以查看您得到了什么。
请在您的代码中更改此行:
using (StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding(1251)))
这可能会对你有所帮助。