一尘不染

WebClient.DownloadString()返回带有特殊字符的字符串

c#

我要从网络上下载我正在构建的屏幕抓取工具的某些内容时遇到问题。

在下面的代码中,从Web客户端下载字符串方法返回的字符串为一些(不是全部)网站的源下载返回一些奇数字符。

我最近添加了http标头,如下所示。以前,在没有标题的情况下调用相同的代码具有相同的效果。我没有尝试过’Accept-
Charset’标头的变体,除了基本知识之外,我对文本编码了解不多。

我指的字符或字符序列是:



Â

当您在Web浏览器中使用“查看源代码”时,看不到这些字符。是什么原因造成的?我该如何解决该问题?

string urlData = String.Empty;
WebClient wc = new WebClient();

// Add headers to impersonate a web browser. Some web sites 
// will not respond correctly without these headers
wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12");
wc.Headers.Add("Accept", "*/*");
wc.Headers.Add("Accept-Language", "en-gb,en;q=0.5");
wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");

urlData = wc.DownloadString(uri);

阅读 274

收藏
2020-05-19

共1个答案

一尘不染

是八位位组的Windows-1252表示形式EF BB BF。这是UTF-8字节顺序标记,这意味着您的远程网页是以UTF-8编码的,但是您正在阅读它的方式就像是Windows-1252。
根据该文档WebClient.DownloadString使用Webclient.Encoding它的编码时,它的远程资源转换成字符串。设置为System.Text.Encoding.UTF8,理论上一切都会正常进行。

2020-05-19