Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определение кодировки у сайта 
V
    Опции темы
wester
Дата 27.6.2011, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



Доброго времени суток.

Дан сайт, в исходнике которого написано 
Цитата

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

пытаюсь скачать страницу этого сайта на диск 

Код

// запись в файл
internal void SetSourceToFile(string source, string fileName)
        {
            using (var sw = new StreamWriter(fileName, false, enc1251))
            {
                sw.Write(source);
                sw.Flush();
                sw.Close();
            }
        }
private Encoding enc1251 = Encoding.GetEncoding(1251);
// запись исходника в переменную
 internal string GetHtmlSource(HttpWebRequest webRequest)
        {
            var webResp = webRequest.GetResponse();
            string source;
            using (var webRespReader = new StreamReader(webResp.GetResponseStream(),enc1251))
            {
                source = webRespReader.ReadToEnd();
            }


            return source;
        }


в результате на диск получаю абракадабру.
при формировании HttpWebRequest я указываю необходимый хидер
Цитата

webRequest.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.7");

PM MAIL   Вверх
Keanor
Дата 28.6.2011, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



Вот выдрал из своего текущего проекта. Работает на ура.

Код

WebClient client = new WebClient();
                try
                {
                    Stream data = client.OpenRead(url);
                    StreamReader reader = new StreamReader(data, Encoding.GetEncoding("windows-1251"));
                    string pageText = reader.ReadToEnd();
                    reader.Close();
                    data.Close();


Accept-Charset

Заголовок Accept-Charset относится к группе заголовков посвященных согласованию содержимого. Он отвечает за согласование кодировок. Если ресурс на сервере представлен в нескольких кодировках, то клиенту предоставляется возможность выбрать наиболее для него предпочтительную. читать больше - http11[dot]ru/post.php?post=19

ЗЫ: Изредко бывает что в meta сайта висит неправильная кодировка. Проверь браузером действительно ли там 1251.

Это сообщение отредактировал(а) Keanor - 28.6.2011, 05:36
PM MAIL   Вверх
wester
Дата 28.6.2011, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



Keanor
Браузером определяется windows-1251. Суть в том, что мне необходимо использовать HttpWebRequest, т.к. я передаю еще куки и другие хидеры сайту.
вот код как формирую HttpWebRequest для сайта

Код

internal HttpWebRequest InitWebRequest(
                                            string method,
                                            string uri,
                                            string refferer,
                                            bool autoRedirect,
                                            bool useCookie)
{
    var webRequest = (HttpWebRequest)WebRequest.Create(uri);

    // выставляем нужные header
    webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 AskTbFXTV5/3.9.1.14019 Firefox/3.6.13";
    webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    webRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
    webRequest.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.7");
    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.Host = "free-torrents.org";
    webRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
    webRequest.Method = method;
    webRequest.KeepAlive = true;
    webRequest.Headers.Add(HttpRequestHeader.CacheControl, "max-age=0");
    webRequest.Timeout = 99000;
    //   webRequest.Proxy = new WebProxy("localhost", 8888); // note прослушка на локалхосте
    webRequest.AllowAutoRedirect = autoRedirect;
    webRequest.Referer = refferer;
    if (useCookie)
    {
        webRequest.Headers.Add(HttpRequestHeader.Cookie, Properties.Settings.Default.Cookie);
    }

    return webRequest;
}


проблему решил, строка была сжата gzip

Это сообщение отредактировал(а) wester - 28.6.2011, 21:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.