Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2013, 14:19   #1
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию смена кодировки

загружаю html страницу, но т.к. страница может быть в utf-8 или в windows-1251 надо каким-то образом выбрать кодировку автоматически. Пробовал так:
Код:
using (StreamReader UTF8 = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
html = UTF8.ReadToEnd();

      
if (html.IndexOf("encoding=\"windows-1251") > 0)
{
    MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(html));
    using (StreamReader ASCII = new StreamReader(stream, Encoding.Default))
        html = ASCII.ReadToEnd();
}
но не выходит, пробовал так:
Код:
using (StreamReader UTF8 = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
html = UTF8.ReadToEnd();

      
if (html.IndexOf("encoding=\"windows-1251") > 0)
{
    using (StreamReader ASCII = new StreamReader(resp.GetResponseStream(), Encoding.Default)) // <-- тут ошибка "Поток был недоступен для чтения."
        html = ASCII.ReadToEnd();
}
хотя если пробовать по отдельности или Encoding.Default или Encoding.UTF8, все нормально работает для своих кодировок.
fate вне форума Ответить с цитированием
Старый 09.02.2013, 16:32   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Думаю это потому, что вы заново вызываете GetResponseStream - вы его уже получили, и поток не закрыт. Вам нужно куда-то сохранить загруженные данные, а потом уже их конвертировать.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 09.02.2013, 17:29   #3
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Selestis Посмотреть сообщение
Думаю это потому, что вы заново вызываете GetResponseStream - вы его уже получили, и поток не закрыт. Вам нужно куда-то сохранить загруженные данные, а потом уже их конвертировать.
Пробовал, результат тот же
fate вне форума Ответить с цитированием
Старый 09.02.2013, 17:37   #4
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

еще заметил такую вещь, после
Код:
html = UTF8.ReadToEnd();
свойство потока CanRead становиться false, но только обратно true поставить не получается т.к. это свойство доступно только для чтения
fate вне форума Ответить с цитированием
Старый 09.02.2013, 18:04   #5
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

пока выкрутился так
Код:
Stream stream = resp.GetResponseStream();
      Stream stream2 = new MemoryStream();
      Stream stream3 = new MemoryStream();
      stream.CopyTo(stream2);
      stream2.Position = 0;
      stream2.CopyTo(stream3);
      stream2.Position = 0;
      if (resp != null) {
          using (StreamReader UTF8 = new StreamReader(stream2, Encoding.UTF8))
              html = UTF8.ReadToEnd();

          if (html.IndexOf("windows-1251", StringComparison.OrdinalIgnoreCase) > 0)
          {
              stream3.Position = 0;
              using (StreamReader ASCII = new StreamReader(stream3, Encoding.Default))
                  html = ASCII.ReadToEnd();
          }
        resp.Close();
если кто-то знает способ проще, напишите
fate вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт текстового файла в БД, смена кодировки Emmelman Microsoft Office Access 6 22.01.2013 17:52
Смена кодировки Prizrak86 C# (си шарп) 1 16.11.2011 19:59
Смена кодировки на UTF8 в VBScript Zeron JavaScript, Ajax 1 29.05.2011 22:21
смена кодировки Lemon2009 Общие вопросы по Java, Java SE, Kotlin 5 11.03.2010 16:54
Смена кодировки AxenicX Общие вопросы C/C++ 2 11.12.2009 22:45