Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизАвтоопределение кодировки... Найти похожие ветки
← →
Someone Who Need You Help (2003-07-19 21:09) [0]Уважаемые спецы!!!
Помогите пожалуйста с функцией, которая будет автоматически определять кодировку исходного текста (WIN, KOI, DOS, ISO)!!!
Ну очень надо!!! Настолько надо, что предоставившему рабочую функцию могу пообещать 7-значную аську... :) Заранее спасибо!!!
← →
Marser (2003-07-19 22:18) [1]const
l3_csANSI = 0;
{-признак кодировки ANSII}
l3_csOEM = 255;
{-признак кодировки OEM}
type
cc_Graph_CriteriaRange = #176..#223; {-критерий для определения псевдографики}
TChars = set of char;
Long = LongInt;
const
cc_OEM_CriteriaEx = [#128..#175] + [#224..#239];
cc_ANSI_CriteriaEx = [#192..#255];
cc_Graph_Criteria = [Low(cc_Graph_CriteriaRange)..High(cc_Graph_CriteriaRange)];
type
T_cc_GraphCounts = array [cc_Graph_CriteriaRange] of Longint;
procedure l3AnalizeCharSetEx(var Buf: PChar; BufEnd: PChar;
var OEMCount, ANSICount, GraphCount: Long;
var GraphCounts: T_cc_GraphCounts);
var
C : Char;
begin
OEMCount := 0;
ANSICount := 0;
GraphCount := 0;
for C := Low(T_cc_GraphCounts) to High(T_cc_GraphCounts) do GraphCounts[C] := 0;
while (Buf < BufEnd) do begin
C := Buf^;
Inc(Buf);
if (C in cc_OEM_CriteriaEx) then Inc(OEMCount);
if (C in cc_ANSI_CriteriaEx) then Inc(ANSICount);
if (C in cc_Graph_Criteria) then begin
Inc(GraphCounts[C]);
Inc(GraphCount);
end;
end;{Buf < BufEnd}
end;
function l3AnalizeCharSetExEx(Buf, BufEnd: PChar): Byte;
var
OEMCount : Long;
ANSICount : Long;
GraphCount : Long;
GraphCount_2: Long;
GraphCounts : T_cc_GraphCounts;
C : Char;
begin
l3AnalizeCharSetEx(Buf, BufEnd, OEMCount, ANSICount, GraphCount,GraphCounts);
if (OEMCount > ANSICount) then
Result := l3_csOEM
else if (GraphCount > = ANSICount) then begin
Result := 0;
GraphCount_2 := GraphCount div 2;
for C := Low(T_cc_GraphCounts) to High(T_cc_GraphCounts) do begin
If (GraphCounts[C] > GraphCount_2) then begin
Result := l3_csOEM;
break;
end;{GraphCounts[C] > ..}
end;{for C}
end else Result := 0;
end;
function l3AnalizeCharSetBuf(Buf: PChar; Len: Long): Byte;
begin
Result := l3AnalizeCharSetExEx(Buf, Buf + Len);
end;
← →
Marconi (2003-07-19 22:43) [2]а если у меня уже 7 знаков...6 или 5 дашь?
← →
Someone Who Need You Help (2003-07-19 23:15) [3]> To Marser
Но это, кажется, ANSII и OEM... А мне надо WIN, KOI, DOS, ISO. Может я, конечно, чего-то и не понимаю...
> To Marconi
За это нет... :) Шестизнак за другую функцию дам по работе с памятью, если интересно - пиши на мыло.
← →
Marser (2003-07-19 23:35) [4]
> ANSII
Вобще-то, это то же, что и ASCII, но все равно правильно ANSI.
Что я могу сказать? Насчет KOI8 могу подсказать - плясать нужно от факта, что при обычном прочтении заглавных букв там будет намного больше чем строчных.
← →
Marconi (2003-07-19 23:45) [5]http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=4843
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622333&n=19
← →
Someone Who Need You Help (2003-07-20 00:05) [6]> To Marser:
Тама написано:
---
Или воспользоваться стандартными WinAPI, но таких только для DOS <--> Win
---
А мне надо WIN, KOI, DOS, ISO... То, на что ты линки дал я и сам через Гугл нашел... Только мне это не подходит.
← →
Marconi (2003-07-20 00:08) [7]помойму со словариком самый дельный вариант, хотя и не самый надежный
← →
Marser (2003-07-20 00:22) [8]
> Someone Who Need You Help (20.07.03 00:05)
Есть ещё вариант - используй частотные таблицы. Для больших текстов самое то. Например, чаще всех встречается буква "О" и т.д. Поищи по Сети.
← →
Someone Who Need You Help (2003-07-20 00:27) [9]> To Marser и Marconi:
Товарищи! Вся беда не в том, что я искать не умею, просто именно с подобным я никогда не работал и просто мудрым советом меня на путь истинный не полставить - дороги не разберу. Поэтому я сюда и обратился за помощью...
← →
Marser (2003-07-20 00:51) [10]Ну тогда прошу меня извинить. Семизначный номер аськи мне ни к чему и думать я за тебя не буду.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c