C# 如何将从网站下载的数据转换为正确的编码?
我在使用.net WebClient控件下载数据时遇到问题,因为我似乎无法控制从web服务器返回的数据的编码 这个问题的细节在下面链接的帖子中,但我想问一个更一般的问题,因为答案并没有真正的帮助(不是回答者的错!) 真正的问题是,假定无法检测来自web服务器的响应编码,web服务器可能不会使用头中指定的编码进行响应。 如果这是真的,那么IE、Firefox和Chrome等web浏览器在使用查看源代码功能时如何解码流C# 如何将从网站下载的数据转换为正确的编码?,c#,asp.net,character-encoding,webkit,browser,C#,Asp.net,Character Encoding,Webkit,Browser,我在使用.net WebClient控件下载数据时遇到问题,因为我似乎无法控制从web服务器返回的数据的编码 这个问题的细节在下面链接的帖子中,但我想问一个更一般的问题,因为答案并没有真正的帮助(不是回答者的错!) 真正的问题是,假定无法检测来自web服务器的响应编码,web服务器可能不会使用头中指定的编码进行响应。 如果这是真的,那么IE、Firefox和Chrome等web浏览器在使用查看源代码功能时如何解码流 这必须是可能的,这似乎是一个真正的基本要求 浏览器可能会查找二进制头 欲了解更
这必须是可能的,这似乎是一个真正的基本要求 浏览器可能会查找二进制头 欲了解更多信息,请访问 片段:
一些二进制文件包含头文件,即计算机程序用来解释文件中数据的元数据块。例如,一个GIF文件可以包含多个图像,标题用于标识和描述每个图像数据块。如果二进制文件不包含任何头文件,则可以称之为平面二进制文件。不是答案,但有一篇非常有趣的文章: 存在一种先有鸡后有蛋的情况,浏览器在能够读取ContentType元素之前无法确定编码,并且除非知道编码,否则无法读取ContentType元素
我相信IE也有一些确定编码的启发式方法(例如,如果所有字节值都低于128,则内容可能被假定为7bit ascii)看起来与以下问题相同:
您必须检查HTTP头。如果它们不是客户端提供给您的,那么作为一个服务器,您就不能做很多事情。我希望这会变得有用: 第一个读取页作为字节数组 然后使用StreamReader,因为StreamReader在内部检测编码 最后使用HttpUtility.HtmlDecode对其进行解码
WebClient client = new WebClient();
byte[] bytes = client.DownloadData(url);
MemoryStream mem = new MemoryStream(bytes);
StreamReader reader = new StreamReader(mem);
string html = reader.ReadToEnd();
html = HttpUtility.HtmlDecode(html);
谢谢我真该想到这个!