работа с System.net

Тема в разделе ".NET", создана пользователем Young Programmer, 13 ноя 2007.

  1. Young Programmer

    Young Programmer Гость

    Уважаемые программисты! Прошу помочь со следующей проблемкой. Приведу код чтобы было нагляднее
    Код (Text):
    using System;
    using System.Net;
    using System.IO;

    class NetDemo {
    public static void Main() {
    int ch;

    HttpWebRequest req=(HttpWebRequest) WebRequest.Create("http://bankreferatov.ru");
    HttpWebResponse resp=(HttpWebResponse) req.GetResponse();

    Stream istrm=resp.GetResponseStream();

    StreamWriter strw=new StreamWriter("list.html");

    for (int i=1;;i++) {
    ch=istrm.ReadByte();
    strw.Write((char)ch);
    Console.Write((char)ch);
    if (ch==-1) break;


    if ((i%400)==0) {Console.WriteLine("\nНажмите клавишу"); Console.Read();}

    }

    strw.Close();
    resp.Close();
    }
    }
    Модератор: код читается лучше, если он оформлен, соответственно!

    Программа не сложная, отображает гипертекст какого-нибудь адреса, выводит его на консоль и в файл. Так вот, на русскоязычных сайтах текст, встречающийся на сайте отображается в виде иероглифов. Хотелось бы исправить, но не знаю в чем проблема. С англоязычными сайтами отображается все нормально. Подскажите пожалуйста. что нужно сделать для корректного отображения
     
  2. Pasha

    Pasha Гость

    Для: Young Programmer
    Читай сразу все содержимое ответа в byte[], потом прогоняй его через Encoding.GetEncoding(1251).GetString(...);
     
  3. Young Programmer

    Young Programmer Гость

    Для Pasha:

    Большое спасибо!!! Действительно, заработало. Только еще вопрос, Вы посоветовали читать содержимое сразу в byte[]. Я читал в BinaryReader а оттуда уже побайтно заливал в byte[]. Может вы имели ввиду как-то напрямую считывать в массив byte[]? Если да, то приведите пожалуйста строку, как это организовать.
     
  4. Pasha

    Pasha Гость

    Для: Young Programmer
    Что-то вроде:
    Код (Text):
    byte[] buffer = new byte[resp.ContentLength];
    int bytesRead = istrm.Read(buffer, 0, buffer.Length);
    Но лучше вот так:
    Код (Text):
    StreamReader readStream = new StreamReader (receiveStream, GetEncoding(1251));
    string content = readStream.ReadToEnd ();
    readStream.Close();
    resp.Close();
     
  5. Young Programmer

    Young Programmer Гость

    Спасибо! Пользовался первым вариантом. Пожже заценю второй. :)
     
Загрузка...

Поделиться этой страницей