HTTP响应中的无效字符集

时间:2015-04-04 21:28:32

标签: c# .net http

我正在为Windows Phone 8.1编写一个C#应用程序。应用程序向具有发布数据的网页发送http请求,但是,当我将请求内容复制到字符串时,它会引发异常。

这是代码,

var values = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("username", "usernameHere"),
        new KeyValuePair<string, string>("password", "passwordHere"),
    };

var httpClient = new HttpClient(new HttpClientHandler());
var response = await httpClient.PostAsync(new Uri(LOGIN_URL), new FormUrlEncodedContent(values));

if (response.IsSuccessStatusCode)
{
    string responseString = "";

    try
    {
        responseString = await response.Content.ReadAsStringAsync();
    }

    catch (Exception e)
    {
        MessageBox.Show("Exception caught " + e);
    }
}

错误是,

  

“System.InvalidOperationException:提供的字符集   ContentType无效。无法使用无效内容作为字符串读取内容   字符集。 ---&GT; System.ArgumentException:'ISO8859_1'不是   支持的编码名称。“

显然,解决方案是使用GetByteArrayAsync而不是PostAsync(How to change the encoding of the HttpClient response),但这样我就无法提交帖子数据。

2 个答案:

答案 0 :(得分:4)

  

显然,解决方案是使用GetByteArrayAsync而不是PostAsync

不,您可以使用HttpContent

ReadAsByteArrayAsync方法
byte[] data = await response.Content.ReadAsByteArrayAsync();

答案 1 :(得分:0)

某些服务器响应可能包含无效的字符集,在这种情况下,ISO8859_1&#39;无效。解决这种情况的另一种方法是在将字符串读取为字符串之前将字符集更改为正确的值:

responseMessage.Content.Headers.ContentType.CharSet = @"ISO-8859-1";
responseString = await response.Content.ReadAsStringAsync();