1

このコードを使用してインターネットから文字列をダウンロードします

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 に答える