Encodage avec HttpClient dans .NET 4.5
Je suis consommant certaines données à l'aide de la fogbugz API XML. Cette API offre toujours des données en UTF-8.
Lors de l'utilisation de la WebClient
classe pour faire une demande, je suis en mesure de définir l'encodage. Par exemple:
var result = new WebClient();
result.Encoding = Encoding.UTF8;
Mais que dire de la HttpClient
classe?
HttpClient client = new HttpClient();
Dois-je utiliser:
client.GetByteArrayAsync(url);
...et puis de convertir les octets à partir de l'encodage (UTF-8) pour une chaîne de caractères?
Ou est-il possible d'obtenir directement le contenu d'une chaîne UTF-8?
using (var client = Connector.GetHttpClient())
{
var byteData = await client.GetByteArrayAsync(url);
data = Encoding.UTF8.GetString(byteData);
}
Enfin, voici un extrait de la réponse XML:
<?xml version="1.0" encoding="UTF-8"?>
<response>
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure d'utiliser
GetStringAsync
- je m'attends à de l'encodage à être déterminé par les en-têtes de la réponse HTTP. Si le serveur n'a pas d'indiquer l'encodage, alors vous devriez éventuellement demander, pour que ce soit corrigé.Alternativement, si vous êtes à l'extraction de données XML, juste aller la chercher comme un tableau d'octets et d'analyser que les binaires directement - la déclaration XML doit spécifier l'encodage pour les non-UTF-8/UTF-16 données de toute façon, donc je dirais qu'en fait il y a moins de place pour l'erreur de cette façon.
MemoryStream
pour envelopper le tableau d'octets).XElement.Parse
. Si vous deviez créer unXmlReader
, qui serait une autre affaire, qui maintient une référence vers le cours d'eau, de sorte qu'il peut lire uniquement les données dont il a besoin.Si je comprends bien, vous n'avez pas besoin d'une chaîne, vous devez XML.
En supposant que vos données ne sont pas trop gros, lire un tableau d'octets avec
puis créer un flux de mémoire à partir de ce tableau, et ensuite de lire les données XML à partir de ce flux, par exemple:
Si vous utilisez un autre API XML, vous pouvez utiliser