Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определение кодировки? [D6, 2000]


pathfinder ©   (2006-05-16 16:34:00) 

Подскажите пожалуйста, как можно программно определить кодировку?


Johnmen   (2006-05-17 15:45:00) [1]

// Sha_IsOem определяет кодировку текста по распределению строчных букв.
// Алгоритм использует то, что в тексте на русском языке буквы 'а'..'п'
// встречаются в 2.2-2.4 раза чаще букв 'р'..'я' (70% к 30%).
// Результат: Oem=1, неизвестно=0, Ansi=-1
function Sha_IsOem(sl: TStringList): integer; overload;
var
 i, ct, ch: integer;
 p, q: pchar;
begin;
 ct:=0;
 Result:=0;
 for i:=sl.Count-1 downto 0 do begin;
   p:=pointer(sl[i]);
   if p<>nil then begin;
     q:=p+pInteger(@p[-4])^;
     while p<q do begin;
       ch:=byte(p[0]);
       if chr(ch)>=chr(14*16) then inc(ct)       //Ansi 'а'..'я' или Oem 'р'..'я'
  else if byte(ch) and 160=160 then inc(Result); //Oem  'а'..'п'
       ch:=byte(p[1]);
       if chr(ch)>=chr(14*16) then inc(ct)       //Ansi 'а'..'я' или Oem 'р'..'я'
  else if byte(ch) and 160=160 then inc(Result); //Oem  'а'..'п'
       p:=p+2;
       end;
     end;
   end;
 ch:=(Result+ct) shr 2;     //Четверть общего количества строчных букв = 0.25 * Count
 Result:=Result-(ct shr 1); //Для Oem = 0.55 * Count, для Ansi = - 0.5 * Count
 //Если результат по абсолютной величине превосходит четверть общего
 //количества строчных букв, то считаем, что кодировка определена успешно.
 if (Result>=ch) or (Result<=-ch) then {ok} else Result:=0;
 end;


Copyright (c) Sha  ©  


pathfinder   (2006-05-17 15:38:00) [2]

Вопрос на самом деле более узкий. Очень хотелось бы программно определять DOS кодировка или WIN.


Desdechado   (2006-05-16 16:40:00) [3]

частотным анализом по характерным признакам для языков
но гарантий не будет, только вероятности


Сергей М.   (2006-05-16 16:39:00) [4]

Никак.


Наверх

Титульная страница Поиск, карта сайта Написать письмо