![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программное определение DOS/Windows кодировки текстового файла! [D5, Win95/98]
Tolstomordik © (2002-04-18 15:36:00)Привет, мастера!!! Я скармливаю своей программе текстовик, который она распихивает по .DB таблицам. Часть текстовиков приходит в норамльной кодировке, а часть - кракозябрами. Как программно определить кодировку???
ЗЫ. По умолчанию я все строки преобразовываю следующей процедурой:
procedure Convert(Stroka: String);
var
Data: Byte;
len: Integer;
I: Integer;
begin
Len:=Length(Stroka);
i:=1;
repeat
data:=ord(Stroka[i]);
IF (Data > 127) and (Data < 176) then Data:=Data + 64
else IF (Data > 223) and (Data < 240) then Data:=Data + 16;
Stroka[i]:=chr(data);
I:=I+1;
until(I = len+1);
Str_Out:=Stroka
Str_Out:="";
Кулюкин Олег (2002-04-19 08:59:00) [1]Я находил код символа, который встречался в тексте максимальное количество раз, и того что оказывался на втором месте.
Самые "частые" буквы в русском языке - "Е" и ... не помню уже, кажется "о".
Потом смотрел какой кодировке они соответствуют.
Достаточно надежно.
Alx2 (2002-04-19 07:54:00) [2]Если только есть либо DOS 866 либо Win 1251:
В DOS кодировке таблица русских маленьких букв имеет разрыв в районе буквы "р". В Win - идут сплошняком.
Slava (2002-04-19 06:48:00) [3]> Tolstomordik
Если просто определить WIN или DOS, то я делал так:
1. Считаем средний код символов, входящих в строку (нужны только те, которые больше #127, остальные не учитываем)
2. Сравниваем полученное число с неким "эталоном".
Если полученное среднее значение меньше "эталона", то это - DOS, иначе - WIN
Экпериментально "эталон" был подобран, равный 200.
За 2,5 года только один раз было неправильное распознавание. Но там была почти одна псевдографика.
arbiter (2002-04-18 18:28:00) [4]Стат. анализ.
Если кодировок мало, то можно простой по частоте появления символов.
Если кодировок входящих много, можно попробовать анализ N-грамм.