9

を使用していくつかのデータを消費しています。このAPIは、常にUTF-8としてデータを提供します。

クラスを使用しWebClientてリクエストを行うと、エンコーディングを設定できます。例えば:

var result = new WebClient(); 
result.Encoding = Encoding.UTF8;

しかし、HttpClientクラスはどうですか?

HttpClient client = new HttpClient();

使用する必要があります:

client.GetByteArrayAsync(url);

...そして、バイトをエンコーディング(UTF-8)から文字列に変換しますか?

または、コンテンツをUTF-8文字列として直接取得する方法はありますか?

using (var client = Connector.GetHttpClient())
{
    var byteData = await client.GetByteArrayAsync(url);
    data = Encoding.UTF8.GetString(byteData);
}

最後に、XML応答からの抜粋を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<response>
4

2 に答える 2

11

使用できるはずですGetStringAsync-エンコーディングはHTTP応答のヘッダーによって決定されると思います。サーバーがエンコーディングを指定していない場合は、それを修正するように依頼する必要があります。

または、XMLデータをフェッチする場合は、バイト配列としてフェッチし、そのバイナリを直接解析します。XML宣言では、UTF-8 / UTF-16以外のデータのエンコーディングを指定する必要があるため、実際にはこの方法では、エラーの余地が少なくなります。

于 2012-06-13T16:01:14.983 に答える
5

私が正しく理解していれば、文字列は必要ありません。XMLが必要です。

したがって、データが大きすぎないと仮定して、バイト配列を次のように読み取ります。

byte[] bytes = await client.GetByteArrayAsync(url); 

次に、その配列からメモリストリームを作成し、そのストリームからXMLを読み取ります。次に例を示します。

XElement element = XElement.Load(new MemoryStream(bytes), LoadOptions.None);

別のXMLAPIを使用している場合は、次を使用できます。

XmlReader reader = XmlReader.Create(new MemoryStream(bytes));
于 2012-06-13T16:06:42.463 に答える