Sam*_*uyn 11 .net c# utf-8 character-encoding windows-runtime
我正在构建一个Windows应用商店应用,但我坚持从API获取UTF-8响应.
这是代码:
using (HttpClient client = new HttpClient())
{
Uri url = new Uri(BaseUrl + "/me/lists");
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.Add("Accept", "application/json");
HttpResponseMessage response = await client.SendRequestAsync(request);
response.EnsureSuccessStatusCode();
string responseString = await response.Content.ReadAsStringAsync();
response.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
该reponseString总是包含奇怪的字符应该是像口音é,我试图使用流,但我在一些例子中发现的API无法在Windows RT存在.
编辑:改进代码,仍然是同样的问题.
Cam*_*nez 22
而不是response.Content.ReadAsStringAsync()直接使用你可以使用response.Content.ReadAsBufferAsync()@Kiewic指向如下:
var buffer = await response.Content.ReadAsBufferAsync();
var byteArray = buffer.ToArray();
var responseString = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
Run Code Online (Sandbox Code Playgroud)
这在我的情况下工作,我想使用UTF8应该解决大多数问题.现在去了解为什么没有办法用这个ReadAsStringAsync:)
是这样解决的:
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = client.GetAsync(url).Result)
{
var byteArray = response.Content.ReadAsByteArrayAsync().Result;
var result = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
也许问题在于响应被压缩了。如果内容类型是 gzip,您需要将响应解压缩为字符串。有些服务器这样做是为了节省带宽,这通常没问题。在 .NET Core 和可能的 .NET Framework 中,这将自动解压缩响应。但这在 UWP 中不起作用。对我来说,这似乎是 UWP 中的一个明显错误。
string responseString = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
该线程给出了如何解压缩响应的清晰示例:
| 归档时间: |
|
| 查看次数: |
19646 次 |
| 最近记录: |