C# WebClient.DownloadString使用了错误的编码

C# WebClient.DownloadString使用了错误的编码,c#,.net,character-encoding,webclient,C#,.net,Character Encoding,Webclient,我正在使用webclient从sharepoint online下载XML文件 但是,当我使用WebClient.DownloadString(stringurl)方法时,有些字符没有正确解码 当我使用WebClient.DownloadFile(字符串url,字符串文件)读取文件时,所有字符都是正确的 xml本身不包含编码声明 string wrongXml = webClient.DownloadString(url); //wrongXml contains Ä™ instead of ę

我正在使用webclient从sharepoint online下载XML文件

但是,当我使用
WebClient.DownloadString(stringurl)
方法时,有些字符没有正确解码

当我使用
WebClient.DownloadFile(字符串url,字符串文件)
读取文件时,所有字符都是正确的

xml本身不包含编码声明

string wrongXml = webClient.DownloadString(url);
//wrongXml contains Ä™ instead of ę

webClient.DownloadFile(url, @"C:\temp\file1.xml");
string correctXml = File.ReadAllText(@"C:\temp\file1.xml");
//contains ę, like it should.
此外,在Internet Explorer中打开url时,它会正确显示


为什么呢?这是因为在使用DownloadString、resp DownloadFile时,我的机器或webclient上的默认windows编码处理响应的方式不同吗?

可能它现在使用的编码不是服务返回的编码

您可以在发出请求之前设置预期的编码:

webClient.Encoding = Encoding.UTF8;
string previouslyWrongXml = webClient.DownloadString(url);

很高兴知道,但是如果我不知道编码怎么办。我想知道服务是否在报头中返回正确的编码。如果有,您可以使用它读取响应字节并将其转换为正确的编码。您可能需要
HttpWebRequest
,但我不确定是否可以使用
WebClient
来代替;文件名*=UTF-8'aaa.xml;filename=“aaa.xml”,所以我可以在使用HttpWebRequest时使用它,但因为在我的情况下它似乎一直都是一样的,所以我只将它设置为WebClient供参考,您应该使用首选的
HttpClient
而不是旧的
WebClient
@Camiloterevento:哦,是的,这很好地解决了问题。你应该加上它作为答案