Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 643

/ вопрос открыт /

Здравствуйте, уважаемые эксперты! У меня вот такой вопрос, есть функция декодирования UCS2 (см.приложение), как заставить программу распознать эту кодировку, чтобы декодирование происходило автоматически?
заранее спасибо.

Приложение:
  1. Function UCS2ToString(s:String):String;
  2. Var i : Integer;
  3. wc : PWideChar;
  4. c : Char;
  5. Begin
  6. Result:='';
  7. i:=1;
  8. While i<=Length(s)-1 do
  9. Begin
  10. c:=s[i];
  11. s[i]:=s[i+1];
  12. s[i+1]:=c;
  13. Inc(i,2);
  14. End;
  15. s:=s+#0;
  16. wc:=@s[1];
  17. Result:=WideCharToString(wc);
  18. End;


Phoenix Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Phoenix (статус: Посетитель)
Вопрос отправлен: 19 июня 2007, 22:46
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Phoenix!
В целом, нет стопроцентного алгоритма для определения кодировки. Но обычно делают так. Для текста определяют встречаемость букв. А потом сравнивают с известными. Например известно, что в русском наиболее часта буква О - 92 на тысячу.
А - 72. Ф и Щ - 1 и меньше. Такую табличку можно найти в интернете или сгенерить вручную.
А теперь к нашим баранам. Декодируем текст и смотрим, а правдоподобный ли это текст? если там нет киррилических символов - скорее всего не наша это кодировка. Если есть - считаем частотность символов. если она нормальна - значит кодировку угадали.

И ещё. Есть тексты, которые в разных кодировках выглядят вполне осмысленно и даже человек не может сказать, что правильно. На одном форуме, когда разрабатывался движок блокнотозаменителя дошли к идее искать тройки символов. Оказывается, не все тройки возможны (ну например глассная+твёрдый знак+ любая буква). и если нужные находятся и "несуществующие" отсутствуют - значит определили. Декодер чётко срабатывал на 100-200 букв

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 20 июня 2007, 00:36
Оценка за ответ: 5

Комментарий к оценке: спасибо, теперь уловил в чем дело!! просто специфика именно UCS2 такова, что при переводе нормального слова из этой кодировки получаются одни "?", и другие нераспознанные, некоторые цифры. нормальные символы кириллицы и латиницы практически не встречаются, так что все просто - нормальные слова фильтруются нормально. достаточно всего 3х ошибок для определения этой кодировки.

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.