在UWP中接收来自HttpClient的响应时的错误编码

Lev*_*vvy 5 c# xml rest encoding uwp

我正在制作uwp(通用Windows平台)应用程序,并希望将这个xml:http://radioa24.info/ramowka.php反序列化为对象,但我得到的是scpecial字符,如ł,ó一些奇怪的字母和特殊的字母,如: \n和\ r:"Ä..."=>"±""ć"=>"ć""Ä™"=>"ę"例如Poniedzia?ek我没有得到PoniedziaÅ\u0082ek

我的代码:

var httpClient = new HttpClient();
var response = await httpClient.GetAsync(uri).AsTask();
response.EnsureSuccessStatusCode();
var result = await httpResponse.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

我试图做一些编码转换,但没有任何成功.如何解决它,因为后来我想得到我的对象?

var reader = new XmlSerializer(typeof(Sources.Schedule));
using (var tr = new MemoryStream(Encoding.UTF8.GetBytes(resultString)))
{
   Schedule = (Sources.Schedule)reader.Deserialize(res);
}
Run Code Online (Sandbox Code Playgroud)

Cih*_*gun 5

请您尝试下面的代码,读取数据作为字节解决您的问题.

using (HttpClient client = new HttpClient())
{
    Uri url = new Uri("http://radioa24.info/ramowka.php");
    HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, url);
    Task<HttpResponseMessage> responseAsync = client.SendRequestAsync(httpRequest).AsTask();
    responseAsync.Wait();
    responseAsync.Result.EnsureSuccessStatusCode();

    Task<IBuffer> asyncBuffer = responseAsync.Result.Content.ReadAsBufferAsync().AsTask();
    asyncBuffer.Wait();
    byte[] resultByteArray = asyncBuffer.Result.ToArray();
    string responseString = Encoding.UTF8.GetString(resultByteArray, 0, resultByteArray.Length);

    responseAsync.Result.Dispose();
}
Run Code Online (Sandbox Code Playgroud)


小智 1

这是我的例子,可以很好地处理波兰语单词。

从页面获取xml的方法:

    public async Task<string> GetXMl(string uri)
    {
        string result = null;
        using (HttpClient httpClient = new HttpClient())
        {
            var response = await httpClient.GetAsync(uri);
            result = await response.Content.ReadAsStringAsync();
        }
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

反序列化xml的方法:

    public void DeserializeXml(string xml)
    {
        var serializer = new XmlSerializer(typeof(ramowka));
        var buffer = Encoding.UTF8.GetBytes(xml);
        using (var stream = new MemoryStream(buffer))
        {
            var ramowka = (ramowka)serializer.Deserialize(stream);
        }
    }
Run Code Online (Sandbox Code Playgroud)

如何使用方法的示例,例如在按钮单击事件中:

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        string xml = await GetXMl("http://radioa24.info/ramowka.php");
        DeserializeXml(xml);
    }
Run Code Online (Sandbox Code Playgroud)

另外,在这里您可以通过 Visual Studio xml 转换为 C# 类 http://pastebin.com/aJ4B1aCF