Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 如何将从网站下载的数据转换为正确的编码?_C#_Asp.net_Character Encoding_Webkit_Browser - Fatal编程技术网

C# 如何将从网站下载的数据转换为正确的编码?

C# 如何将从网站下载的数据转换为正确的编码?,c#,asp.net,character-encoding,webkit,browser,C#,Asp.net,Character Encoding,Webkit,Browser,我在使用.net WebClient控件下载数据时遇到问题,因为我似乎无法控制从web服务器返回的数据的编码 这个问题的细节在下面链接的帖子中,但我想问一个更一般的问题,因为答案并没有真正的帮助(不是回答者的错!) 真正的问题是,假定无法检测来自web服务器的响应编码,web服务器可能不会使用头中指定的编码进行响应。 如果这是真的,那么IE、Firefox和Chrome等web浏览器在使用查看源代码功能时如何解码流 这必须是可能的,这似乎是一个真正的基本要求 浏览器可能会查找二进制头 欲了解更

我在使用.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);

谢谢我真该想到这个!