9

我正在使用 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>
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);

如果您使用的是另一个 XML API,则可以使用

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