Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.09.2013, 23:39
Pcrepair
 
Сообщения: n/a
По умолчанию Невизульное определение неправильной кодовой страницы веб-страницы

Добрый день. Есть программа для анализа информации на веб-страницах.
Для определения кодировки страницы используются два метода:
- использование ответа сервера (номер кодовой страницы + 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  
Старый 12.09.2013, 00:40
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Кодировку стоит определять по нескольким параметрам (по очереди):
1. HTTP-ответ
Код:
Content-Type: text/html; charset=UTF-8
2. Параметры XML (для XHTML):
Код HTML:
<?xml version="1.0" encoding="utf-8"?>
3. Мета-тег в заголовке страницы
Код HTML:
<meta http-equiv="content-type" content="text/html; charset=utf-8">

Используя все 3 метода, можно определить кодировку с точностью 98%. Оставшиеся 2% - это сайты, которые не отдают кодировку в ответе. Для таких обычно принято использовать UTF-8. Некоторые браузеры любят так же проводить частотный анализ, но это уже сложнее.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
Uniq! (12.09.2013)
  #3  
Старый 13.09.2013, 21:08
Pcrepair
 
Сообщения: n/a
По умолчанию

есть гр. Алексеев(он же GunSmoker) и есть у него выложенный пример использования mlang.dll в 3-х вариантах. У меня используется 3-й вариант (автоопределение кодировки с использованием частотного анализа). и все работает в 99% случаев (кроме приведенного в топики примера и когда страница очень маленькая и тогда функция выдает исключение (там Я вставил обработку исключений и принудительное присвоение 1251 в одном месте одной функции, но речь не об этом).

так вот все таки иногда ошибается и mlang.dll. но при этом, на этой странице не ошибается TEncoding (используется значение ответа сервера о используемой кодировке страницы), зато TEncoding ошибается в до 10% случаев.

сейчас надо применить следующую обработку:
- скачать страницу в RawByteString
- проверить в теге TITLE, получилось ли 1251
- если нет применить TEncoding

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

Ну теперь то всем уже понятно для чего мне нужно определить кодировку символов между тегами TITLE?
Ответить с цитированием
  #4  
Старый 13.09.2013, 22:40
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от PhoeniX
Некоторые браузеры любят так же проводить частотный анализ, но это уже сложнее.
На самом деле UTF-8 однозначно раскодируется, и это удалось без ошибок, -- текст точно в UTF-8, совпадения исключены. Неспроста соответствующий параметр в Opera называется "Fallback encoding": он применяется, если раскодировать страницу как UTF-8 не удалось.
Ответить с цитированием
  #5  
Старый 14.09.2013, 07:01
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Я не пойму, зачем её определять? В обоих приведённых документах она явно указана в мета-тэгах. Частотный анализ и определение "методом тыка" (получилось / не получилось) - это уже то, чем надо заниматься при отсутствии явно указанной кодировки в документе.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 14.09.2013, 10:11
Pcrepair
 
Сообщения: n/a
По умолчанию

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

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


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025