Проблема кодирования при чтении веб-сайта, три разные кодировки - PullRequest
3 голосов
/ 01 февраля 2011

У меня проблема с WebRequest в C #. Это страница Google.

Состояния заголовка

text/html; charset=ISO-8859-1

На сайте указано

<meta http-equiv=content-type content="text/html; charset=utf-8">

И, наконец, я получаю только ожидаемый результат в отладчике, а также регулярное выражение, когда я использую Encoding.Default, по умолчанию System.Text.SBCSCodePageEncoding

И что мне теперь делать? У вас есть какие-нибудь подсказки, как это могло произойти или как я мог решить эту проблему?

Фактическая кодировка страницы выглядит как UTF-8. По крайней мере, FF отображает его правильно в UTF-8, , а не в Windows-Wh независимо и не в латинице1.

URL-адрес это

Проблема в знаке €, как и во всех немецких умлаутах.

Заранее спасибо за помощь по этой проблеме, которая сводит меня с ума!

Обновление: когда я вывожу строку через

// create a writer and open the file
TextWriter tw = new StreamWriter("test.txt");

// write a line of text to the file
tw.WriteLine(html);

// close the stream
tw.Close();

все отлично работает.

Похоже, проблема в том, что отладчик не показывает правильную кодировку, а также регулярное выражение.

Как мне сказать C # обрабатывать RegEx как UTF-8?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Вместо анализа HTML, почему бы не использовать Google Query API ?

Кстати, перед анализом HTML с помощью регулярных выражений прочитайте это ; -)

РЕДАКТИРОВАТЬ: В ответ на ваш комментарий:

  1. API работает для Google Desktop а также.
  2. Эта проблема с кодировкой характерна для страницы Google?
  3. Помимо проблемы, с которой вы столкнулись сейчас, кто знает, с какой проблемой вы столкнетесь позже, в работе, из-за незначительных изменений в HTML этих страниц или в заголовке, отправленном веб-сервером. Веб-страница должна быть удобной для глаз, а не для компьютера . Единственное, что вы можете ожидать от дружелюбия - это внешний вид и отображаемое содержимое страницы, а не базовая структура HTML. В отличие от API, который должен быть дружественным к компьютеру .
1 голос
/ 01 февраля 2011

Только что нашел решение ... заняло много времени, но это работает:

Символы в строке изменены после загрузки HTML из Интернета

...