【发布时间】:2012-01-26 14:39:47
【问题描述】:
在获取一些随机西班牙报纸的索引时,我没有使用 WebRequest 正确获取变音符号,它们产生了这个奇怪的字符:�,而使用 WebClient 从同一个 uri 下载响应时,我得到了适当的响应。
为什么会这样区分?
var client = new WebClient();
string html = client.DownloadString(endpoint);
对
WebRequest request = WebRequest.Create(endpoint);
using (WebResponse response = request.GetResponse())
{
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string html = reader.ReadToEnd();
}
【问题讨论】:
-
我猜,但这可能是因为
WebClient.DownloadString查看content-type标头(例如“text/html; charset=utf-16”)来推断编码,但您的WebRequest 方法使用 UTF8(StreamReader 的默认值) -
content-type标头在这种情况下未指定字符集。 -
@Nico。然后它应该根据前导码(检测 BOM 和其他迹象)对 UTF-8、UTF-16LE、UTF-16BE 和 UTF-32 进行测试,最后默认使用默认的旧字符集,这恰好发生在与您机器上的站点相匹配。由于 HTTP 假定 Latin-1(毕竟是 90 年代初),因此最好明确地使用它作为“我不知道”的选择。
标签: c# webclient webrequest