|
Вопрос # 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х ошибок для определения этой кодировки.
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|