Boa*_*ler 9 .net c# unicode encoding dotnet-httpclient
我使用fogbugz XML API 消耗了一些数据.此API始终以UTF-8提供数据.
当使用WebClient类来发出请求时,我可以设置编码.例如:
var result = new WebClient();
result.Encoding = Encoding.UTF8;
Run Code Online (Sandbox Code Playgroud)
但那HttpClient班级怎么样?
HttpClient client = new HttpClient();
Run Code Online (Sandbox Code Playgroud)
我应该使用:
client.GetByteArrayAsync(url);
Run Code Online (Sandbox Code Playgroud)
...然后将编码中的字节(UTF-8)转换为字符串?
或者有没有办法直接将内容作为UTF-8字符串?
using (var client = Connector.GetHttpClient())
{
var byteData = await client.GetByteArrayAsync(url);
data = Encoding.UTF8.GetString(byteData);
}
Run Code Online (Sandbox Code Playgroud)
最后,这里是XML响应的摘录:
<?xml version="1.0" encoding="UTF-8"?>
<response>
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
您应该可以使用GetStringAsync- 我希望编码由HTTP响应中的标头确定.如果服务器没有指定编码,那么您应该要求修复它.
或者,如果您正在获取XML数据,只需将其作为字节数组获取并直接解析该二进制文件 - XML声明应该指定非UTF-8/UTF-16数据的编码,所以我认为实际上这种方式的错误空间较小.
如果我理解正确,您不需要字符串,您需要 XML。
所以,假设你的数据不是太大,读取一个字节数组
byte[] bytes = await client.GetByteArrayAsync(url);
Run Code Online (Sandbox Code Playgroud)
然后从该数组创建一个内存流,然后从该流中读取 XML,例如:
XElement element = XElement.Load(new MemoryStream(bytes), LoadOptions.None);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是其他 XML API,则可以使用
XmlReader reader = XmlReader.Create(new MemoryStream(bytes));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16875 次 |
| 最近记录: |