(назовем это так) стандартным способом является чтение WebBrowser.DocumentStream вместо транскодированного DocumentText .
Затем используйте внутреннюю кодировку (страница Content-Type charset
), предоставленную свойством WebBrowser.Document.Encoding , и используйте эту кодировку для чтения потока.
Используйте этот код, когда WebBrowser.Document
загружен полностью, подписавшись на событие WebBrowser.DocumentCompleted и ожидая, пока WebBrowser1.ReadyState = WebBrowserReadyState.Complete .
В примере кода закодированный текст отправляется в элемент управления TextBox.
Это просто пример. Делай что хочешь с этим. Но имейте в виду, что событие DocumentCompleted
может быть вызвано несколько раз.
//Somewhere...
webBrowser1.Navigate("http://www.cyberforum.ru/");
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;
string decodedText = string.Empty;
Stream htmlStream = webBrowser1.DocumentStream;
Encoding pageEncoding = Encoding.GetEncoding(webBrowser1.Document.Encoding);
using (StreamReader destReader = new StreamReader(htmlStream, pageEncoding))
{
decodedText = destReader.ReadToEnd();
};
textBox1.Text = decodedText;
}
Теперь текст содержимого страницы использует правильную кодировку:
<meta name="keywords" content="форум программистов, компьютерный форум, киберфорум,(...)" />
<meta name="description" content="КиберФорум - форум программистов (...)" />