在.NET 4.5中使用HttpClient进行编码

我正在使用fogbugz XML API消耗一些数据。 此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响应的摘录:

   

您应该能够使用GetStringAsync – 我希望编码由HTTP响应中的标头确定。 如果服务器没有指定编码,那么您应该要求修复它。

或者,如果您正在获取XML数据,只需将其作为字节数组获取并直接解析该二进制文件 – XML声明应该指定非UTF-8 / UTF-16数据的编码,所以我认为实际上这种方式的错误空间较小。

如果我理解正确,您不需要字符串,则需要XML。

因此,假设您的数据不是太大,请使用读取字节数组

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

然后从该数组创建一个内存流,然后从该流中读取XML,例如:

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

如果您正在使用其他XML API,则可以使用

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