1

我使用此代码从 Internet 下载字符串

public static async Task<string> DownloadPageAsync(string url)
{
    HttpClientHandler handler = new HttpClientHandler {UseDefaultCredentials = true, AllowAutoRedirect = true};
    HttpClient client = new HttpClient(handler);            
    client.MaxResponseContentBufferSize = 196608;
    HttpResponseMessage response = await client.GetAsync(url);

    response.EnsureSuccessStatusCode();

     string responseBody = await response.Content.ReadAsStringAsync();
     return responseBody;
  }

但它仅适用于 UTF8 文档。我在哪里设置编码?

4

3 回答 3

2

将 ReadAsStringAsync 更改为 ReadAsBufferAsync 并使用所需编码解析结果

var buffer = await response.Content.ReadAsBufferAsync();
byte [] rawBytes = new byte[buffer.Length];
using (var reader = DataReader.FromBuffer(buffer))
{
    reader.ReadBytes(rawBytes);
}

var res = Encoding.UTF8.GetString(rawBytes, 0, rawBytes.Length);   
于 2014-12-27T20:34:44.543 回答
1

在 WinRT 中,HttpContent 从 Headers 属性中读取 Enconding。如果来自服务器的 HTTP 响应没有设置带有编码的 Content-Type 标头,它会尝试在流中查找 BOM 标记,如果没有 BOM,它将默认为 UTF-8 编码。

如果服务器未发送正确的 Content-Type 标头,您可以使用 HttpContent.ReadAsStreamAsync() 方法并使用您自己的 Encoding 类实例来正确解码数据。

于 2012-07-25T23:16:08.007 回答
0

设置 HttpResponse 对象的“ContentEncoding”属性:

价值观包括:

PS:

这真的不是“地铁”本身——只是 C#/.Net(尽管是 .Net 4.x)

于 2012-06-15T16:22:58.110 回答