проблемы кодирования с HttpWebResponse - PullRequest
1 голос
/ 02 декабря 2011

У меня проблемы с кодировкой символов, полученной из веб-ответа http, вместо этого я получаю ? é.

Я установил кодировку в соответствии с Content-Type веб-страницы text/javascript; charset=ISO-8859;

Мой код:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(..);
request.Method = "GET";
request.AllowAutoRedirect = false;
request.Referer = "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1";
request.Headers.Add("DNT", "1");
request.Accept = "text/html,application/xhtml+xml,application/xml";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream, Encoding.GetEncoding("iso-8859-1"));

char[] buf = new char[256];
int count;
StringBuilder buffer = new StringBuilder();

while ((count = sr.Read(buf, 0, 256)) > 0)
{
    buffer.Append(buf, 0, count);
}

string responseStr = buffer.ToString();
Console.WriteLine(responseStr);
response.Close();
stream.Close();
sr.Close();

Можете ли вы сказать мне, что с ним не так?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Попробуйте добавить следующее, прежде чем сделать запрос:

request.Headers.Add(HttpRequestHeader.AcceptCharset, "ISO-8859-1");

Кстати, вы должны сохранить свой StreamReader с ISO-8859-1 (вместо UTF8), если вы хотите попробовать мое предложенное решение. Удачи!

1 голос
/ 02 декабря 2011

Вы пытались установить его на UTF-8? Более того, вы отправляете реферера, который, я думаю, вы пытались установить UserAgent. Приведенный ниже код такой же, как ваш, но затем он не переходит через байтовый массив и устанавливает кодировку useragent и utf8.

var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.AllowAutoRedirect = false;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1";
request.Headers.Add("DNT", "1");
request.Accept = "text/html,application/xhtml+xml,application/xml";

using(var response = (HttpWebResponse)request.GetResponse())
using(var stream = response.GetResponseStream())
using (var sr = new StreamReader(stream, Encoding.UTF8))
{
    string responseStr = sr.ReadToEnd();
    Console.WriteLine(responseStr);
    response.Close();
    if (stream != null)
        stream.Close();
    sr.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...