Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизОпределение кодировки? Найти похожие ветки
← →
pathfinder (2006-05-16 16:34) [0]Подскажите пожалуйста, как можно программно определить кодировку?
← →
Сергей М. © (2006-05-16 16:39) [1]Никак.
← →
Desdechado © (2006-05-16 16:40) [2]частотным анализом по характерным признакам для языков
но гарантий не будет, только вероятности
← →
pathfinder (2006-05-17 15:38) [3]Вопрос на самом деле более узкий. Очень хотелось бы программно определять DOS кодировка или WIN.
← →
Johnmen © (2006-05-17 15:45) [4]// 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 ©
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c