gpt4 book ai didi

c# - 使用 WebClient 和 WebRequest 之间的编码差异?

转载 作者:太空狗 更新时间:2023-10-30 01:24:31 25 4
gpt4 key购买 nike

在获取一些随机西类牙报纸的索引时,我没有使用 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();
}

最佳答案

在创建流阅读器时,您只是假设实体是 UTF-8 格式,而没有明确设置编码。您应该检查 HttpWebResponseCharacterSet(未由 WebResponse 基类公开),然后打开 StreamReader使用适当的编码。

否则,如果它读取的内容不是 UTF-8,就好像它是 UTF-8,它会遇到在 UTF-8 中无效的八位字节序列,必须用 U+FFFD 替换字符 ( ) 尽其所能。

WebClient 几乎完成了以下工作:DownloadString 是一个更高级别的方法,WebRequest 及其派生类让您可以进入较低级别,它有一个调用“向 URI 发送 GET 请求,检查 header 以查看正在使用的内容编码,以防您需要解压缩或解压缩它,查看适当的字符编码,设置文本阅读器使用该编码和流,然后调用 ReadAll()”。正常的高级大块指令与低级小块指令的优缺点适用。

关于c# - 使用 WebClient 和 WebRequest 之间的编码差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com