![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Добрый день. Есть программа для анализа информации на веб-страницах.
Для определения кодировки страницы используются два метода: - использование ответа сервера (номер кодовой страницы + TEncoding) - использование MLang.dll в режиме анализа текста страницы Оба метода дают ошибки: - первый метод на www.rfs.ru/main/news/ct134/ (выдает <title>????????n?n???. ??n???n????°?»n???n??? n??°??n? ? ?¤??</title>) - второй метод на www.rusteam.permian.ru/players/ (выдает <title>naidiay dinnee ii oo?aieo. eadiee. a</title>) причем если поменять ссылки то восстановление кодировки будет в норме, то есть можно выполнить перекодировку спорной страницы в 2-х функциях параллельно, в одной точно будет правильный результат(кодовая страница 1251) Вопрос: как можно по символам между тегами <title> понять какой способ выбрать? --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
А стандартно использовать meta http-equiv="Content-Type" не подходит? Для первой там <meta http-equiv="content-type" content="text/html; charset=utf-8" /> для второй <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> Это сообщение отредактировал(а) Illusion Dolphin - 12.9.2013, 00:06 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
не, не подходит. кроме этих 2-х страниц есть еще миллиарды других и ошибка в определении кодировки страницы при таком подходе может быть 5..10%. итого десятки миллионов непроверенных страниц. нет не подходит. есть гр. Алексеев(он же GunSmoker) и есть у него выложенный пример использования mlang.dll в 3-х вариантах. У меня используется 3-й вариант (автоопределение кодировки с использованием частотного анализа). и все работает в 99% случаев (кроме приведенного в топики примера и когда страница очень маленькая и тогда функция выдает исключение (там Я вставил обработку исключений и принудительное присвоение 1251 в одном месте одной функции, но речь не об этом). так вот все таки иногда ошибается и mlang.dll. но при этом, на этой странице не ошибается TEncoding (используется значение ответа сервера о используемой кодировке страницы), зато TEncoding ошибается в до 10% случаев. сейчас надо применить следующую обработку: - скачать страницу в RawByteString - проверить в теге TITLE, получилось ли 1251 - если нет применить TEncoding такая структура обработки позволит повысить результат возможно до 99.99% Ну теперь то всем уже понятно для чего мне нужно определить кодировку символов между тегами TITLE? --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
Откуда такая уверенность если это ещё не реализовано? Или реализовано , но в некоторых случаях даёт сбои? Добавлено через 7 минут и 44 секунды В любом случае если у вас есть большая база для проверки я бы дополнил ваш автодетектинг следующими методами, которые не просто так существуют: 1) Как выше говорил <meta http-equiv="content-type" 2) В респонсе в хидерах есть Content-Type Вообще как бы эти 2 метода должны быть "основой", а уже если они выдали чушь, то тогда пытаться проводить частотный анализ == угадывать, тем более, что любое угадывание даёт ошибку. Это сообщение отредактировал(а) Illusion Dolphin - 13.9.2013, 20:23 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
пока что именно угадывание дает наилучший результата, очень много страниц(в рунете) где указано одно а сервер выдает другое
и еще раз есть метатег title, с межтеговым содержимым. мне нужна функция которая дает ДА, если кодовая страница(после обработки, исходно идет RawByteString)символов в межтеге равна 1251 . наглядно: <title>бла-бла-бла</title> а не <title>naidiay dinnee ii oo?aieo. eadiee. a</title> как определить что кодировка бла-бла-бла соответствует 1251??????????????????????????????????? --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
Вот тут смотрели? http://www.webdelphi.ru/2010/04/mlang-avto...i-veb-stranicy/ А ещё пишут что надо ориентироваться в первую очередь на хидер респонса, а потом уже на meta - вот страница с тестом http://alekciy.ru/articles/what_priority/what_priority.php . Там крякозяблы, хотя в meta всё верно указано, т.е. браузеры учитывают в первую очередь хидер песпонса, а потом уже если его нету или другое условие - они пытаются автоопределить.
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
а как же и там то же смотрели, где то там же и и код с МЛАНГ скачали а потом долго долго разные варианты проверяли на сотне гдет о всяких УРЛ(там и УТФ8-16, и 1251, и уропейские кодировки, и вообще без кодировки, в общем всякой твари по паре) вариант с использованием МЛАНГ(частотный анализ текста страницы) оказался наиболее эффективным, но не на 100% по этому задаю еще раз вопрос: есть метатег title, с межтеговым содержимым. мне нужна функция которая дает ДА, если кодовая страница(после обработки, исходно идет RawByteString)символов в межтеге равна 1251 . наглядно: <title>бла-бла-бла</title> а не <title>naidiay dinnee ii oo?aieo. eadiee. a</title> как определить что кодировка бла-бла-бла соответствует 1251? заранее спасибо за ответ на вопрос --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
Что-то вспомнилась сага http://www.gunsmoker.ru/2008/10/x-y-z.html Попробую объяснить. Вы используете частотный анализ, что это значит: в каждом языке в среднем каждый символ встречается с определённой вероятностью. Это значит что если есть БОЛЬШОЙ текст, то вероятность определить язык достаточна велика по статистике символов. В случае с МЛАНГ вы анализируете страницу и получаете кодировку, я не считаю, что это правильно, т.к. в этом случае некоторыекорректные страницы будут неправильно определены, и наоборот - некоторые неверно настроенные (т.е. старые, сейт заброшен коих много, неверно сконфигурирован итд, в любом случае - пользователь его не увидет) будут рочитаны верно. Я не знаю какой смысл сканировать сайты, которые пользователь не прочитает. В случае с конкретным вопросом я вам отвечу. Допустим имеется RawByteString, надо ответить - а 1251 ли это? 1) Переводим RawByteString в 1251 2) Считаем статистику символов (или можно прогонять по русскому словарю на совпадения, но это сложнее и затратнее) 3) Если статистика выше какого-то порога (устанавливается вами эксперементально), то это считается 1251 mlang делает наверное то же самое, но сравнивает статистике не с 1251, а со многими кодировками и выбирает наиболее близкую по статистике. Можно просчитать количество русских символов и вычесть какие-то специфические символы, которые появляются в неправильной перекодировке русского текста. Проблемы: Т.к. тайтл это маленький текст, то вероятность ошибки очень большая Я бы на вашем месте проверил сайты с учётом хидеров респонса и нашёл те, которые выдают при этом неверные результаты. Их открыл бы в браузерах и помотрел, а правильно ли показывают браузеры, если в браузере крякозяблы - то всё верно, так и должно быть, и незачем кодировку искать. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
это все понятно, но разве нет функции в ДЕЛФИ которая по символу определяет соответствие символа (или набора символов - слова) к кодовой странице?
если символ имеет два байта, где ж там есть данные о кодировке? есть же разные функции которые могут принудительно установить кодовую страницу для страницы(символов в нее входящих) или нет? а то как то слишком сложно получается --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Illusion Dolphin |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
Я вам по секрету расскажу, только никому не говорите - такой функции вообще не существует и не может существовать
А с чего вы взяли, что символ 2 байта?
100% попадания не будет в ващей задаче, надо найти такой способ, который пользуются браузеры и использовать его. Если при этом какие-то страницы будут крякозяблами, то это проблемы страниц, а не ваши, незачем решать проблемы, к вам не относящиеся. Добавлено через 10 минут и 52 секунды Тут http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%B2_%D0%B2_HTML ещё раз написано то, о чём я уже говорил: порядок такой: 1) Смотрим в респонс хидер и ещем кодировку, если нашли то используем её 2) Если №1 не получился, то ищем мета контент тайп, если нашли то опять мы молодцы 3) Если и этого нету, то используем угадывание через ваш мланг -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |