![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день. Есть программа для анализа информации на веб-страницах.
Для определения кодировки страницы используются два метода: - использование ответа сервера (номер кодовой страницы + 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> понять какой способ выбрать? |
#2
|
||||
|
||||
![]() Кодировку стоит определять по нескольким параметрам (по очереди):
1. HTTP-ответ Код:
Content-Type: text/html; charset=UTF-8 Код HTML:
Код HTML:
Используя все 3 метода, можно определить кодировку с точностью 98%. Оставшиеся 2% - это сайты, которые не отдают кодировку в ответе. Для таких обычно принято использовать UTF-8. Некоторые браузеры любят так же проводить частотный анализ, но это уже сложнее. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
Uniq! (12.09.2013)
|
#3
|
|||
|
|||
![]() есть гр. Алексеев(он же GunSmoker) и есть у него выложенный пример использования mlang.dll в 3-х вариантах. У меня используется 3-й вариант (автоопределение кодировки с использованием частотного анализа). и все работает в 99% случаев (кроме приведенного в топики примера и когда страница очень маленькая и тогда функция выдает исключение (там Я вставил обработку исключений и принудительное присвоение 1251 в одном месте одной функции, но речь не об этом).
так вот все таки иногда ошибается и mlang.dll. но при этом, на этой странице не ошибается TEncoding (используется значение ответа сервера о используемой кодировке страницы), зато TEncoding ошибается в до 10% случаев. сейчас надо применить следующую обработку: - скачать страницу в RawByteString - проверить в теге TITLE, получилось ли 1251 - если нет применить TEncoding такая структура обработки позволит повысить результат возможно до 99.99% Ну теперь то всем уже понятно для чего мне нужно определить кодировку символов между тегами TITLE? |
#4
|
||||
|
||||
![]() Цитата:
|
#5
|
||||
|
||||
![]() Я не пойму, зачем её определять? В обоих приведённых документах она явно указана в мета-тэгах. Частотный анализ и определение "методом тыка" (получилось / не получилось) - это уже то, чем надо заниматься при отсутствии явно указанной кодировки в документе.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
|||
|
|||
![]() пока что именно угадывание дает наилучший результата, очень много страниц(в рунете) где указано одно а сервер выдает другое
и еще раз есть метатег title, с межтеговым содержимым. мне нужна функция которая дает ДА, если кодовая страница(после обработки, исходно идет RawByteString)символов в межтеге равна 1251 . наглядно: <title>бла-бла-бла</title> а не <title>naidiay dinnee ii oo?aieo. eadiee. a</title> как определить что кодировка бла-бла-бла соответствует 1251? |