Codifica con HttpClient in .NET 4.5

Sto consumando alcuni dati usando l’API XML di fogbugz . Questa API offre sempre i dati come UTF-8.

Quando si utilizza la class WebClient per effettuare una richiesta, sono in grado di impostare la codifica. Per esempio:

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

Ma per quanto riguarda la class HttpClient ?

 HttpClient client = new HttpClient(); 

Dovrei usare:

 client.GetByteArrayAsync(url); 

… e quindi convertire i byte dalla codifica (UTF-8) in una stringa?

O c’è un modo per ottenere direttamente il contenuto come una stringa UTF-8?

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

Infine, ecco un estratto dalla risposta XML:

   

Dovresti essere in grado di utilizzare GetStringAsync : mi aspetto che la codifica venga determinata dalle intestazioni nella risposta HTTP. Se il server non specifica la codifica, dovresti potenzialmente chiedere che sia corretto.

In alternativa, se si stanno recuperando dati XML, è sufficiente recuperarli come array di byte e analizzare direttamente il binario – la dichiarazione XML deve comunque specificare la codifica per i dati non UTF-8 / UTF-16, quindi direi che in realtà c’è meno spazio per errori in questo modo.

Se ho capito bene, non hai bisogno di una stringa, hai bisogno di XML.

Quindi, supponendo che i tuoi dati non siano troppo grandi, leggi un array di byte con

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

quindi creare un stream di memoria da tale array e quindi leggere XML da quel stream, ad esempio:

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

Se stai usando un’altra API XML, puoi usare

 XmlReader reader = XmlReader.Create(new MemoryStream(bytes));