Как написать общий код для чтения HTML, закодированный с различными кодировками? - PullRequest
1 голос
/ 15 июля 2011

Я пытаюсь написать код для чтения содержимого веб-страницы, но я не уверен в используемой кодировке на этой странице, так как я могу написать общий код, который возвращает правильную строку без странного символы? Кодировка может быть ("UTF-8", "windows-1256", ...). Я пытался, но UTF-8, но когда страница закодирована со второй упомянутой кодировкой, у меня появляются некоторые странные символы.

Вот код, который я использую:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("SOME-URL");
request.Method = "GET";
WebResponse response = request.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
string content = streamReader.ReadToEnd();

А вот ссылка, которая вызывает проблему: http://forum.khleeg.com/144828.html

Ответы [ 2 ]

3 голосов
/ 16 июля 2011

Вы должны проверить текст ответа, чтобы проверить это поле:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />

Эти символы также будут корректно декодированы, так как они являются ANSI. Согласно данным из этого тега, вы должны создать свой объект Encoding с помощью метода GetEncoding следующим образом:

var enc1 = Encoding.GetEncoding("windows-1256");
var enc2 = Encoding.GetEncoding(1256);

Другим способом является использование .ContentEncoding свойства HttpWebResponse:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var enc1 = Encoding.GetEncoding(response.ContentEncoding);

Или .CharacterSet свойство:

string Charset = response.CharacterSet;
var enc1 = Encoding.GetEncoding(Charset);
0 голосов
/ 16 июля 2011

На странице, которую вы упоминаете, точно сказано, какую кодировку она использует, вот строка, найденная там.

<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />

Не можете ли вы найти строку, подобную этой, и воздействовать на эту информацию?

...