在获取一些随机的西班牙报纸的索引时,我没有使用WebRequest正确地得到变音符号,他们产生这个奇怪的字符:�
,同时使用WebClient
从同一个uri下载响应我得到适当的回应。
为什么会出现这种差异?
var client = new WebClient();
string html = client.DownloadString(endpoint);
VS
WebRequest request = WebRequest.Create(endpoint);
using (WebResponse response = request.GetResponse())
{
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string html = reader.ReadToEnd();
}
答案 0 :(得分:4)
您只是假设在创建流式读取器时实体是UTF-8而未明确设置编码。您应该检查CharacterSet
的{{1}}(未由HttpWebResponse
基类公开),并使用适当的编码打开WebResponse
。
否则,如果它读取的东西不是UTF-8,就好像它是UTF-8一样,它会遇到在UTF-8中无效的八位字节序列,并且必须用U + FFFD替换字符替换( StreamReader
)尽可能做到最好。
WebClient做了很多这样的事情:�
是一个更高级别的方法,在DownloadString
及其派生类允许你进入较低级别的方法中,它只有一个调用“向GET请求发送一个GET请求URI,检查标题以查看正在使用的内容编码,以防您需要解压缩或解压缩,查看字符编码是什么,设置具有该编码的文本阅读器和流,然后调用WebRequest
“。正常的高级别大块指令与低级别小块指令的优缺点适用。