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

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

25.11.2008, 05:04. Показов 8053. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru