Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Невизульное определение неправильной кодовой стран, Невизульное определение неправильной код 
:(
    Опции темы
Pcrepair
Дата 11.9.2013, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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/
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 12.9.2013, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



Цитата

- использование ответа сервера (номер кодовой страницы + TEncoding)
- использование MLang.dll в режиме анализа текста страницы

А стандартно использовать 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
PM MAIL WWW ICQ   Вверх
Pcrepair
Дата 13.9.2013, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 12.9.2013,  00:04)
А стандартно использовать meta http-equiv="Content-Type" не подходит?

не, не подходит. кроме этих 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/
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 13.9.2013, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



Цитата

такая структура обработки позволит повысить результат возможно до 99.99%

Откуда такая уверенность если это ещё не реализовано? smile
Или реализовано , но в некоторых случаях даёт сбои?

Добавлено через 7 минут и 44 секунды
В любом случае если у вас есть большая база для проверки я бы дополнил ваш автодетектинг следующими методами, которые не просто так существуют:
1) Как выше говорил <meta http-equiv="content-type"
2) В респонсе в хидерах есть Content-Type
Вообще как бы эти 2 метода должны быть "основой", а уже если они выдали чушь, то тогда пытаться проводить частотный анализ == угадывать, тем более, что любое угадывание даёт ошибку. 

Это сообщение отредактировал(а) Illusion Dolphin - 13.9.2013, 20:23


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Pcrepair
Дата 14.9.2013, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



пока что именно угадывание дает наилучший результата, очень много страниц(в рунете) где указано одно а сервер выдает другое

и еще раз
есть метатег title, с межтеговым содержимым. мне нужна функция которая дает ДА, если кодовая страница(после обработки, исходно идет RawByteString)символов в межтеге равна 1251 . наглядно: <title>бла-бла-бла</title> а не <title>naidiay dinnee ii oo?aieo. eadiee. a</title>
как определить что кодировка бла-бла-бла соответствует 1251???????????????????????????????????
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 14.9.2013, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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
PM MAIL WWW ICQ   Вверх
Pcrepair
Дата 14.9.2013, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 14.9.2013,  10:12)
Вот тут смотрели?

а как же и там то же смотрели, где то там же и и код с МЛАНГ скачали
а потом долго долго разные варианты проверяли на сотне гдет о всяких УРЛ(там и УТФ8-16, и 1251, и уропейские кодировки, и вообще без кодировки, в общем всякой твари по паре)
вариант с использованием МЛАНГ(частотный анализ текста страницы) оказался наиболее эффективным, но не на 100%

по этому задаю еще раз вопрос:
есть метатег title, с межтеговым содержимым. мне нужна функция которая дает ДА, если кодовая страница(после обработки, исходно идет RawByteString)символов в межтеге равна 1251 . наглядно: <title>бла-бла-бла</title> а не <title>naidiay dinnee ii oo?aieo. eadiee. a</title>
как определить что кодировка бла-бла-бла соответствует 1251?

заранее спасибо за ответ на вопрос
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 14.9.2013, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



Цитата

как определить что кодировка бла-бла-бла соответствует 1251?

Что-то вспомнилась сага http://www.gunsmoker.ru/2008/10/x-y-z.html

Попробую объяснить. Вы используете частотный анализ, что это значит: в каждом языке в среднем каждый символ встречается с определённой вероятностью. Это значит что если есть БОЛЬШОЙ текст, то вероятность определить язык достаточна велика по статистике символов. В случае с МЛАНГ вы анализируете страницу и получаете кодировку, я не считаю, что это правильно, т.к. в этом случае некоторыекорректные страницы будут неправильно определены, и наоборот - некоторые неверно настроенные (т.е. старые, сейт заброшен коих много, неверно сконфигурирован итд, в любом случае - пользователь его не увидет) будут рочитаны верно. Я не знаю какой смысл сканировать сайты, которые пользователь не прочитает. 
В случае с конкретным вопросом я вам отвечу. 
Допустим имеется RawByteString, надо ответить - а 1251 ли это?
1) Переводим RawByteString в 1251 
2) Считаем статистику символов (или можно прогонять по русскому словарю на совпадения, но это сложнее и затратнее)
3) Если статистика выше какого-то порога (устанавливается вами эксперементально), то это считается 1251

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

Проблемы:
Т.к. тайтл это маленький текст, то вероятность ошибки очень большая

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


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Pcrepair
Дата 14.9.2013, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



это все понятно, но разве нет функции в ДЕЛФИ которая по символу определяет соответствие символа (или набора символов - слова) к кодовой странице?
если символ имеет два байта, где ж там есть данные о кодировке? есть же разные функции которые могут принудительно установить кодовую страницу для страницы(символов в нее входящих)
или нет?
а то как то слишком сложно получается
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 14.9.2013, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



Цитата

но разве нет функции в ДЕЛФИ которая по символу определяет соответствие символа (или набора символов - слова) к кодовой странице?

Я вам по секрету расскажу, только никому не говорите - такой функции вообще не существует и не может существовать

Цитата

если символ имеет два байта, где ж там есть данные о кодировке?

А с чего вы взяли, что символ 2 байта? smile 1251 это однобайтовая кодировка (1 byte = 1 char) и таких кодировок очень много, отсюда и проблемы - надо угадать, к какой кодировке это относится.

Цитата

а то как то слишком сложно получается 

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

Добавлено через 10 минут и 52 секунды
Тут http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%B2_%D0%B2_HTML ещё раз написано то, о чём я уже говорил: порядок такой:
1) Смотрим в респонс хидер и ещем кодировку, если нашли то используем её
2) Если №1 не получился, то ищем мета контент тайп, если нашли то опять мы молодцы
3) Если и этого нету, то используем угадывание через ваш мланг


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.