繁体   English   中英

.NET 4.5中使用HttpClient进行编码

[英]Encoding with HttpClient in .NET 4.5

我正在使用 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响应的摘录:

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

您应该能够使用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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM