在获取一些随机的西班牙报纸索引时,我没有使用 WebRequest 正确获取变音符号,它们产生了这个奇怪的字符:�
,同时使用 a 从同一个 uri 下载响应WebClient
我得到了适当的回应。
为什么会出现这种差异化呢?
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();
}
在创建流读取器时,您只是假设实体采用 UTF-8 格式,而没有显式设置编码。您应该检查CharacterSet
of the HttpWebResponse
(未暴露于WebResponse
基类),然后打开StreamReader
使用适当的编码。
否则,如果它像读取 UTF-8 一样读取非 UTF-8 的内容,则会遇到在 UTF-8 中无效的八位字节序列,并且必须用 U+FFFD 替换字符进行替换(�
)尽其所能。
WebClient 几乎做了这样的事情:DownloadString
是一种更高级别的方法,其中WebRequest
及其派生类可让您进入较低层,它有一个调用“向 URI 发送 GET 请求,检查标头以查看正在使用的内容编码,以防您需要取消 gzip 或解压缩它,查看字符编码是什么,使用该编码和流设置文本阅读器,然后调用ReadAll()
“。正常的高级大块指令与低级小块指令的优缺点适用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)