Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];




Вниз

Программное определение DOS/Windows кодировки текстового файла! 


Tolstomordik   (2002-04-18 15:36) [0]

Привет, мастера!!! Я скармливаю своей программе текстовик, который она распихивает по .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:="";



arbiter   (2002-04-18 18:28) [1]

Стат. анализ.
Если кодировок мало, то можно простой по частоте появления символов.
Если кодировок входящих много, можно попробовать анализ N-грамм.



Slava   (2002-04-19 06:48) [2]

> Tolstomordik

Если просто определить WIN или DOS, то я делал так:

1. Считаем средний код символов, входящих в строку (нужны только те, которые больше #127, остальные не учитываем)

2. Сравниваем полученное число с неким "эталоном".
Если полученное среднее значение меньше "эталона", то это - DOS, иначе - WIN

Экпериментально "эталон" был подобран, равный 200.

За 2,5 года только один раз было неправильное распознавание. Но там была почти одна псевдографика.



Alx2   (2002-04-19 07:54) [3]

Если только есть либо DOS 866 либо Win 1251:
В DOS кодировке таблица русских маленьких букв имеет разрыв в районе буквы "р". В Win - идут сплошняком.



Кулюкин Олег   (2002-04-19 08:59) [4]

Я находил код символа, который встречался в тексте максимальное количество раз, и того что оказывался на втором месте.
Самые "частые" буквы в русском языке - "Е" и ... не помню уже, кажется "о".
Потом смотрел какой кодировке они соответствуют.
Достаточно надежно.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.016 c
1-2616            Gamar                 2002-04-20 17:52  2002.05.02  
Шрифт в диалогах


1-2587            vcrits                2002-04-19 17:36  2002.05.02  
Как можно сделать в Delphi 6 из ActiveX библиотеки


1-2565            vadim2                2002-04-19 11:45  2002.05.02  
где посмотреть исходник функции Pos(Substr;S: string) ?


1-2614            dfdfd                 2002-04-20 17:43  2002.05.02  
Как перевести String в Pchar?


1-2542            roman001              2002-04-18 18:32  2002.05.02  
TStringGrid.Objects