Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Парсинг HTML [D7, WinXP]


Страницы:   1 2

Alex_C ©   (2009-05-21 19:06:00) 

Столкнулся с весьма специфичной задачью:
есть в инете HTML страничка. Надо ее скачать и пропарсить. Парситься она очень просто - каждый столбец у нее имеет свою позицию и длинну.
Проблема выяснилась в том, что данные в эту табличку могут вноситься с использованием национальных символов. В частности венгерская буква "o с двуми черточками сверху" при приеме интерпритируется в 2 символа - Е' - в результате чего столбцы сдвигаются, и парсить становиться невозможно. Кто нибудь знает, как с этим бороться?


brother   (2009-05-25 04:11:00) [1]

не хочу буквоедничать, но как согласуется

> Нет там тегов. Текст просто разбитый ПРОБЕЛАМИ по столбцам.

с

> В заголовке стоит content="text/html;charset=utf-8".


> куда между тегами <br> вставлен обычный кусок текста.

что фигней страдаешь? Штирлиц?
показывай код твоего HTML.


KilkennyCat   (2009-05-24 23:03:00) [2]


> sniknik ©   (24.05.09 22:24) [27]

Именно об этом я и говорил, что парсить надо сразу. А когда уже преобразовано хрен знает где и чем - можно только гадать.


sniknik   (2009-05-24 22:24:00) [3]

> [0] Надо ее скачать и пропарсить.
где в словах скачать и пропарсить есть слова "копируется через буфер обмена"?
(эффект неявного преобразования при копировании через буфер это именно то про, что говорил Игорь Шевченко)

понимаю теперь откуда взялся html который "не html" и таблица без табличных тегов... автор оказывается исходный код html странички получает копируя отображаемое браузером через буфер обмена.


KilkennyCat   (2009-05-24 22:04:00) [4]

В общем, как обычно - задающий нифига не может объяснить толком, что у него за проблема, обзывает всех тупыми, и у одного оказался телепатор.


Alex_C   (2009-05-24 20:08:00) [5]


> Игорь Шевченко ©   (24.05.09 00:40) [20]
> sniknik ©   (24.05.09 00:20) [19]
>
>
> > а тебе бы научится получше читать...
>
>
> взаимно.
>
> Я имел в виду, что буква ő может вставиться в неюникодную
> программу как o", а буква ű - как u". По меньшей мере я
> наблюдал такой эффект через буфер обмена.


В общем как обычно - куча тупых советов, но все же один человек нашелся, который все объяснил!
То Игорь Шевченко: Вот! Совершенно верно! Никакой utf-8 тут не причем. Совершенно верно - "что буква ő может вставиться в неюникодную программу как o", а буква ű - как u". "


KilkennyCat   (2009-05-24 13:36:00) [6]

Я знаю, что такое utf-8.


sniknik   (2009-05-24 12:19:00) [7]

> а я имел ввиду, что пофиг как кто что чем где и когда отображает.
вот именно это и показывает, что ты не понимаешь то, что тут описывают как проблему.

> Тянем файл. Такой, какой он есть на сервере. Обращаемся к нему как к набору байт.
и видим, что "таблица" ровно отображающаяся в браузере "кривая" в строках таких каких она есть  на сервере.

> И пофиг, юникод или нет. 1 байт или 2.
сколько раз повторить что utf-8 это не юникод? нет там ровно 1-го или 2-х байт на символ. там от 1 до 7 на символ, в произвольном порядке в зависимости от того, что за символ, какого языка.

> Распарсили - вот тогда уже отображаем
как? в этом то у него и вопрос. работать в исходной кодировке он не хочет/не может/не знает как/и т.д., хочет попроще, от того что видит в браузере (и не хочет знать как сам браузер это составил).
алгоритма не зависящего от позиций говорит нет (см. c [3]), а позиционный... то что в браузере начинается с 15 символа например в исходных может начинаться с 20го или 25го, в зависимости от данных в столбце.

> это бред.
еще раз настоятельно рекомендую почитать про кодировки, прежде чем высказываться здесь и обзывать бредом все, что сам не понимаешь.


Германн   (2009-05-24 00:55:00) [8]

АП на вас троих не хватает!
:)


KilkennyCat   (2009-05-24 00:50:00) [9]

а я имел ввиду, что пофиг как кто что чем где и когда отображает. Тянем файл. Такой, какой он есть на сервере. Обращаемся к нему как к набору байт. И парсим самостоятельно. И пофиг, юникод или нет. 1 байт или 2. У нас есть жесткие правила, и только ими руководствоваться должно.
Распарсили - вот тогда уже отображаем, как угодно, чем угодно, где угодно и в чем угодно.
А анализировать, как оно все выглядит в каком-то браузере или блокноте или в чем-нить еще, и на основании этого пытаться сообразить парсинг - это бред.


Игорь Шевченко   (2009-05-24 00:40:00) [10]

sniknik ©   (24.05.09 00:20) [19]


> а тебе бы научится получше читать...


взаимно.

Я имел в виду, что буква ő может вставиться в неюникодную программу как o", а буква ű - как u". По меньшей мере я наблюдал такой эффект через буфер обмена.


sniknik   (2009-05-24 00:20:00) [11]

> За ради интереса можешь попробовать поэкспериментировать
зачем мне экспериментировать если я это знаю? а тебе бы научится получше читать...

p.s. Я в ответе за свои слова, а не за то, что вы подумали. (© не помню чей)

> а ты попробуй сразу юникод читать
если сразу читать в юникод то получится бред, utf-8 это ни разу не юникод.
вот преобразовать, и после работать с юникодом, это да, может получится проще.


Игорь Шевченко   (2009-05-23 23:28:00) [12]

Автор, а ты попробуй сразу юникод читать, в смысле функции с W на конце использовать


Игорь Шевченко   (2009-05-23 23:25:00) [13]

sniknik ©   (23.05.09 23:13) [16]

За ради интереса можешь попробовать поэкспериментировать - найди страницу с большим кусом венгерского текста и повставляй его в неюникодные программы с разной кодовой страницей - узнаешь много нового, в частности, про то, что часть венгерских символов преобразуется в пары.


sniknik   (2009-05-23 23:13:00) [14]

>>  вот некоторые национальные символы приходят как 2 байта
> бред какой-то...
тебе тоже не помешает почитать про различные кодировки.


KilkennyCat   (2009-05-23 23:09:00) [15]


> Понимаешь, есть "небольшая" проблема - эта страничка Международного
> Союза электросвязи


Ну, да, тогда просить нельзя. А то отругают, или даже побьют.


> Все символы - по 1 байту


>  вот некоторые национальные символы приходят как 2 байта

бред какой-то...
может, имеет смысл все-таки сначала пропарсить, а потом отображать? а не пытаться обработать уже обработанное в соответствии каким-то кодировкам...

> вы все меня не поняли!

Тебя прекрасно поняли. Ты сам пойми, где, когда и что делать.


sniknik   (2009-05-23 23:08:00) [16]

> Ребят, вы все меня не поняли!
все тебя поняли, а вот ты не желаешь понять...

> Т.е. предсказать, когда прийдет такой символ - невозможно.
а не надо предугадывать, надо работать в той кодировке в которой представлен текст, по ее "правилам".

> А самое главное не понимаю, почему IE его отображает нормально, а приходит он как 2 байта.
это потому, что ответов не читаешь... а курс лекций на тему, что же такое utf-8 тебе тут читать не собираются.


Alex_C   (2009-05-23 22:59:00) [17]


> тогда это не HTML.


Открою большой секрет - это ХТМЛ ))) Это обычная ХТМЛ страничка, куда между тегами <br> вставлен обычный кусок текста.


> и что, нельзя попросить, чтоб вставили непечатаемый символ?


Понимаешь, есть "небольшая" проблема - эта страничка Международного Союза электросвязи, со штаб-квартирой в Нью-Йорке... Боюсь они меня не послушают )))


> но собствеенно, я все равно не понимаю проблемы. и не понимаю,
>  зачем какие-то функции.
> Имеем последовательность байт:
> 12 23 45 67 89 01 56 87
> если это уникод - тут 4 символа. если нет - 8.


Ребят, вы все меня не поняли! НЕТ ТАМ НИКАКИХ 4 байт! Все символы - по 1 байту, и текст - как бы совершенно обычный текст! Но! Вот я смотрю страничку с этим текстом у них на сайте - вижу символ национальный. Скачиваю страничку при помощи InternetReadFile - все скачивается как обычнае символы, по 1 байту, а вот некоторые национальные символы приходят как 2 байта - вот в чем проблема! Т.е. предсказать, когда прийдет такой символ - невозможно. А самое главное не понимаю, почему IE его отображает нормально, а приходит он как 2 байта.


KilkennyCat   (2009-05-23 02:51:00) [18]


> а если это UTF8

Возможно. Но без разницы, ибо вряд ди парсируемый документ то в одной, то в другой кодировке. И если утф - бежим по байтам как утф.

> проблемы может и есть но в чем они неясно.

в человеческом факторе, разумеется.
Ну и в Касперском.


sniknik   (2009-05-23 01:00:00) [19]

> если это уникод - тут 4 символа. если нет - 8.
а если это UTF8 то тут от 2х до 8и символов... смотря что за символы.

> Ну и какие трудности?
а вот это действительно непонятно, т.к. нет конкретики, а "в общем" можно бесконечно одно и тоже мусолить.
т.е. проблемы может и есть но в чем они неясно.


KilkennyCat   (2009-05-23 00:29:00) [20]

и что, нельзя попросить, чтоб вставили непечатаемый символ?
но собствеенно, я все равно не понимаю проблемы. и не понимаю, зачем какие-то функции.
Имеем последовательность байт:
12 23 45 67 89 01 56 87
если это уникод - тут 4 символа. если нет - 8.
нам надо пропарсить, зная, что следующая колонка с определенной позиции? Ну и какие трудности? Парсим легко и просто. И главное - быстро. А потом уже мучаем с отображением в тексте, конвертируя в нужную кодировку и т.д.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо