如何改进部分对响应内容编码的处理?
时间: 2024-09-20 19:13:23 浏览: 48
为了改进对响应内容编码的处理,你可以做以下几点:
1. 使用try-catch块捕获`HttpResponseException`:这是一个专门针对HTTP操作的异常类别,它通常包含有关HTTP响应状态的详细信息,包括状态码和头信息。可以从中获取`Content-Type`,以及可能的自定义`charset`字段。
```csharp
using (var httpResponse = (HttpWebResponse)webRequest.GetResponse())
{
if (httpResponse == null || httpResponse.StatusCode < HttpStatusCode.OK)
{
throw new Exception($"HTTP 请求失败,状态码:{httpResponse.StatusCode}");
}
string contentType = httpResponse.Headers["Content-Type"];
int charsetIndex = contentType?.ToLower().IndexOf("charset=");
// 确保找到有效的字符集
if (charsetIndex > -1)
{
Encoding encoding;
try
{
encoding = Encoding.GetEncoding(contentType.Substring(charsetIndex + "charset=".Length).Trim());
}
catch (EncoderFallbackException)
{
encoding = Encoding.Default; // 或者选择其他默认编码,如UTF-8
}
}
else
{
encoding = Encoding.Default;
}
// 使用找到的编码读取响应流
// ...
}
```
2. 使用`StreamReader`的构造函数传递`encoding`参数,这样可以在创建时就确保使用正确的编码:
```csharp
using (StreamReader reader = new StreamReader(responseStream, encoding ?? Encoding.Default))
{
result = reader.ReadToEnd();
}
```
这里我们添加了一个默认编码作为备选方案,防止因找不到自定义字符集而导致解析失败。
这样做可以提高代码的健壮性,更好地处理不同服务器返回的编码情况。
阅读全文