С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/43: Рейтинг темы: голосов - 43, средняя оценка - 4.51
deadleaves

Проблемы c кодировкой при чтении исходника HTML через webBrowser

25.11.2008, 05:04. Показов 8026. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно вывести исходный код HTML страницы в richTextBox'е. Для этого создан объект типа webBrowser. Исходный код беру через webBrowser1.DocumentText
при выводе на richTextBox и в файл через FileStream вместо русских букв выводятся квадратики типа

content="������������� ��������� ������� ����������,
HTML страничка в кодировке win-1251. Пробовал конвертить строку с текстом в UTF8, вместо квадратиков вопросики.

В инете долго рылся, поиск ничего не дал.

Очень буду признателен за помощь.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2008, 05:04
Ответы с готовыми решениями:

WebBrowser и локальная HTML страница. Проблемы с кодировкой
Нужно в WebBrowser'е открыть HTML страницу из файла. Кириллические символы отображаться в неправильной кодировке. Как это исправить? ...

Проблема с кодировкой при чтении HTML-страницы
вот на этот запрос Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ...

Проблемы с кодировкой в HTML
<!DOCTYPE html> <html> <head> <title>�仂�� ���舒仆亳�舒</title> </head> <body> </body> ...

4
Jeminem
13.01.2010, 12:37
У меня возник такой же вопрос
сайт rbc.ru возвращал одни квадраты вместо русских буковок.
Пока искал ответ, нарвалсся на твой вопрос
и через пару минут решил сам!

Ключ к решению задачи находится в использовании свойства DocumentStream
Напишу код на VB.NET
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function GetTextFromWb(wb as WebBrowser)
      Dim aText As String = ""
      Dim aFile As IO.FileStream
      Dim hDocEncoding As Encoding
      Dim encodingAS As String
      Dim aStream As IO.Stream
      Dim SR As IO.StreamReader
      '----------------------------------------------------------------------
      aStream = WB.DocumentStream
      If WB.Document Is Nothing Then
         Return
      End If
      '----------------------------------------------------------------------
     ' Очень важный шаг получить кодировку, используемую сайтом
      encodingAS = WB.Document.Encoding                          
      hDocEncoding = Encoding.GetEncoding(encodingAS)
      SR = New IO.StreamReader(aStream, hDocEncoding)       
      '----------------------------------------------------------------------
      Do While SR.Peek() >= 0
         aText = aText & SR.ReadLine() & vbNewLine
      Loop
      Return aText
end function
Надеюсь на C# перевести не составит труда!
0 / 0 / 1
Регистрация: 23.02.2010
Сообщений: 3
23.02.2010, 19:50
Привет всем вот здесь описано решения вашей проблемы.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using namespace System::Text::RegularExpressions;
 
typedef array<System::Byte> ByteArray;
 
static Regex^ charsetRegex = gcnew Regex( "charset=((\\w+)-?([0-9]+)?(-[0-9])?)(.*?)", (RegexOptions)(RegexOptions::IgnoreCase|RegexOptions::Multiline) );
 
System::String^ GetEncodedHtmlPage(System::String^ url)
{
    System::Net::HttpWebResponse^ response = nullptr;
    System::IO::Stream^ stream             = nullptr;
    System::IO::StreamReader^ reader       = nullptr;
    System::IO::MemoryStream^ memStream    = nullptr;
    try {
        // Создаем Http запрос с прддержкой gzip.
        System::Net::HttpWebRequest^ request = (System::Net::HttpWebRequest^)( System::Net::WebRequest::Create( url ) );
    request->Headers->Add("Accept-Encoding", "gzip");
        response = (System::Net::HttpWebResponse^)( request->GetResponse( ) );
        System::String^ contenetEncoding = response->Headers[System::Net::HttpResponseHeader::ContentEncoding];
        stream = response->GetResponseStream();
        // Если данный сайт поддерживает gzip компрессацию то декомпресируем запрос и читаем в stream.
        if( !System::String::IsNullOrEmpty( contenetEncoding ) && contenetEncoding->Equals( "gzip" ) )
            stream = gcnew System::IO::Compression::GZipStream(stream, System::IO::Compression::CompressionMode::Decompress);
        // Проверяем "ContentType" на наличие кодировки странички.
    if( response->ContentType->ToLower()->Contains("charset") )
    {
        System::String^ output = System::String::Empty;
        System::String^ enc    = System::String::Empty;
        if( charsetRegex->IsMatch(response->ContentType) )
            enc = charsetRegex->Match( response->ContentType )->Groups[1]->Value;
 
        System::IO::StreamReader^ streamReader = gcnew System::IO::StreamReader( stream, System::Text::Encoding::GetEncoding( enc ) );
        output = streamReader->ReadToEnd();
        stream->Close();
        streamReader->Close();
        response->Close();
        return output;
        }
 
    System::String^ outputHtmlText = System::String::Empty;
    memStream = gcnew System::IO::MemoryStream;
    System::Text::Encoding^ encoding = nullptr;
    ByteArray^ buffer = gcnew ByteArray(1024);
    int readBytes = 0;
    // Читаем stream и пишем его в memStream.
    while( (readBytes = stream->Read( buffer, 0, 1024)) != 0 )
        memStream->Write( buffer, 0, readBytes );
    stream->Close();
    // Переносим указатиль memStream на начало.
    memStream->Position = 0;
    // Читаем из memStream-а в StreamReader.
    reader = gcnew System::IO::StreamReader(memStream);
    // Ситаем от начало до конца в String.
    outputHtmlText = reader->ReadToEnd();
    System::String^ pageEncoding = System::String::Empty;
    if( charsetRegex->IsMatch( outputHtmlText ) )
        pageEncoding = charsetRegex->Match(outputHtmlText)->Groups[1]->Value;
    else pageEncoding = System::Text::Encoding::UTF8->WebName;
 
    memStream->Position = 0;
    reader = gcnew System::IO::StreamReader( memStream, System::Text::Encoding::GetEncoding( pageEncoding ) );
    outputHtmlText = reader->ReadToEnd();
    reader->Close();
    memStream->Close();
    response->Close();
    return outputHtmlText;
    }
    catch(...) {
    // Если при работе возникли кокиета проблеммы то возвращаем пустое значение.
    if( response  != nullptr ) response->Close();
    if( stream    != nullptr ) stream->Close();
    if( reader    != nullptr ) reader->Close();
    if( memStream != nullptr ) memStream->Close();
    return "";
    }
    return "";
}
0
Gen-s
18.10.2012, 23:05
Цитата Сообщение от Jeminem Посмотреть сообщение
Надеюсь на C# перевести не составит труда!
А тем, кому составит, выкладываю то что я сделал из этого примера:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.IO;
...
string str = "";
 
Stream aStream = webBrowser1.DocumentStream;
if (aStream != null)
{
   Encoding hDocEncoding = Encoding.GetEncoding(webBrowser1.Document.Encoding);
   StreamReader SR = new StreamReader(aStream, hDocEncoding);
   do
   {
       str = str + SR.ReadLine() + "\n";
   } while (SR.Peek() >= 0);
}
 Аватар для MrLOLS
23 / 23 / 4
Регистрация: 21.11.2010
Сообщений: 77
27.06.2015, 23:27
C#
1
2
StreamReader sr = new StreamReader(this.webBrowser1.DocumentStream, Encoding.GetEncoding("windows-1251"));
responseTextBox.Text = sr.ReadToEnd();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2015, 23:27
Помогаю со студенческими работами здесь

Беда с кодировкой при чтении csv файла
Привет! При создание csv в OpenOffic, файл сохраняется в UTF-8 и при обработки в php проблем не возникает, но если файл создан в...

Проблема с кодировкой при чтении текста из файла
в файле все норм отображает , но при считывание проблема с кодировкой , может кто знает как это подправить? private void...

Ошибка в кодировкой при чтении из файла с функцией fgetcsv
Всем привет!. Пытаюсь читать csv файл построчно с помощью fgetcsv но получаю какие то непонятные символы. Да тут проблема в кодировке....

WebBrowser. Ошибка при чтении DocumentText
Доброго времени суток! Пытаюсь получить код интернет страницы из браузера. Делаю это вот таким образом: string s =...

Проблемы с кодировкой при посте
Иногда получается вот такое http://forum.1-info.ru/messages.php?id=144791#144791 Встречал также и в других ситуациях - ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru