| 
| 
 | Вопрос # 643/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты! У меня вот такой вопрос, есть функция декодирования UCS2 (см.приложение), как заставить программу распознать эту кодировку, чтобы декодирование происходило автоматически?заранее спасибо.
 Приложение:Переключить в обычный режим Function UCS2ToString(s:String):String;Var i   : Integer;    wc  : PWideChar;    c   : Char;Begin Result:=''; i:=1; While i<=Length(s)-1 do   Begin     c:=s[i];     s[i]:=s[i+1];     s[i+1]:=c;     Inc(i,2);   End; s:=s+#0; wc:=@s[1]; Result:=WideCharToString(wc);End;
|  |   Вопрос задал: Phoenix (статус: Посетитель)Вопрос отправлен: 19 июня 2007, 22:46
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, Phoenix!В целом, нет стопроцентного алгоритма для определения кодировки. Но обычно делают так. Для текста определяют встречаемость букв. А потом сравнивают с известными. Например известно, что в русском наиболее часта буква О - 92 на тысячу.
 А - 72. Ф и Щ - 1 и меньше. Такую табличку можно найти в интернете или сгенерить вручную.
 А теперь к нашим баранам. Декодируем текст и смотрим, а правдоподобный ли это текст? если там нет киррилических символов - скорее всего не наша это кодировка. Если есть - считаем частотность символов. если она нормальна - значит кодировку угадали.
 
 И ещё. Есть тексты, которые в разных кодировках выглядят вполне осмысленно и даже человек не может сказать, что правильно. На одном форуме, когда разрабатывался движок блокнотозаменителя дошли к идее искать тройки символов. Оказывается, не все тройки возможны (ну например глассная+твёрдый знак+ любая буква). и если нужные находятся и "несуществующие" отсутствуют - значит определили. Декодер чётко срабатывал на 100-200 букв
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 20 июня 2007, 00:36
 Оценка за ответ: 5
 Комментарий к оценке: спасибо, теперь уловил в чем дело!! просто специфика именно UCS2 такова, что при переводе нормального слова из этой кодировки получаются одни "?", и другие нераспознанные, некоторые цифры. нормальные символы кириллицы и латиницы практически не встречаются, так что все просто - нормальные слова фильтруются нормально. достаточно всего 3х ошибок для определения этой кодировки.  |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |