Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

ANSI или ASCII   Найти похожие ветки 

 
Андрей1   (2004-08-14 10:59) [0]

Доброе утро всем!

Подскажите, существует ли функция определяющая кодировку текста?
Нужно считать текстовый файл, а затем определить в какой кодировке
он написан в ANSI или ASCII.
Огромное спасибо!


 
Anatoly Podgoretsky ©   (2004-08-14 11:03) [1]

Нет и это задача для искусственного интеллекта, все остальные методы на основе статистики или анализа кодов не являются достоверными. Может ты позволишь это пользователю, как это сделано в браузерах и постовиках?


 
KSergey ©   (2004-08-14 11:03) [2]

На 100% - это невозможно
А вообще - есть яндекс. Таких ф-ций попадалось мне - куча.


 
TUser ©   (2004-08-14 11:21) [3]

Вроде даже на этом сайте был такой компонент.


 
Sergey Kaminski ©   (2004-08-14 12:29) [4]

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


function IsStringANSI(S: string): TTextCodePage;
type
 CharSet = set of char;
const
 cp1251Set: CharSet = ["А".."Я","а".."я"];
 cp866Set: CharSet  = [ #$80..#$9F,#$A0..#$EF];
var
 i: Integer;
 Ch: Char;
 cp1251Counter,
 cp866Counter: Integer;
begin
 cp1251Counter := 0;
 cp866Counter := 0;
 Result := cpDefault;

 for i := 1 to Length(S) do
 begin
   if S[I] in cp1251Set then
     Inc (cp1251Counter)
   else
     if S[I] in cp866Set then
       Inc (cp866Counter);
 end;

 Result := (cp1251Counter > cp866Counter);
end;



 
Sergey Kaminski ©   (2004-08-14 12:31) [5]

Сорри, тип возвр. результата Boolean


 
Anatoly Podgoretsky ©   (2004-08-14 13:01) [6]

Это не будет работать, поскольку "А".."Я","а".."я"] входит как подмножество в #$A0..#$EF, а условие построено ка if then else


 
Sergey Kaminski ©   (2004-08-14 13:35) [7]

>> Anatoly Podgoretsky ©   (14.08.04 13:01) [6]

Ох, вот что случается, когда неразобравшись вставляешь куски чужого кода :(


 
Cobalt ©   (2004-08-14 13:46) [8]

2 Anatoly Podgoretsky ©   (14.08.04 11:03) [1]
Есть интересная страничка, мне очень понравилась, рекомендую всем:
http://koi8.pp.ru/prosto.html


 
leonon ©   (2004-08-14 13:49) [9]

После долгих поисков я написал такую вот функцию:

function CheckWinText(S : string) : boolean;
Var
 I, Count1, Count2 : longint;
 T1, T2, Tmp : string;
Const
 LengthText  = 100;
 RussianText =
  "ть ий ый ат ст ва ны ся ра ро ов ши ен по ит ре ни ка пр ос ив ер вш ан ьс ри " +
  "ав нн щи ор за во на ко от но ол ле те од ли ти ло вы ск то ес ел ющ ль та ас " +
  "об тр ет ве йс он ал ин не ар ир ис ие ла ки ик пе аз ме до че аю де ок ев оп " +
  "чи ом со ви ем ма мо ут ед ди го па ыв из ог ру да ад ну сп кр тв ич ты ят бе " +
  "ак ля ми га оз бо ьн ек гр оч пи си ам пл бр ча се жи ез сл им ап ия мы нт ус " +
  "ци тн же ба са ку би ил ой еп ож ур ря аг кл аб зн дн бл рн чн вл ач ту ня зо " +
  "жа ше це еч ги аж ей хо ры тс уп зи зв лу уд сн ид ша ул сс др иц ио вн уч ег " +
  "св ду пу гл рт ще уб ае ум ув зд иг кт ца уш су еж лю тк нь бу см ха ыс ох ье " +
  "му лы ук фи вс зм вк уж ац ящ нс дв нк ип сы еб ах ян ую еш аш ош гн ец мн яв " +
  "уг ун рм чк ои ща фо нд рк жд рс ыт яю тя ое вр сь ео лк гу ды жн ып зы зр иб " +
  "хи вя ащ ух дс зе ге зл ыр рг шк оо хл вз чу ык кс ех аф кн тл зу рд лл ущ зг " +
  "ву их дк ыл иа зб ыш яз рв нц ья нч ай ьк уз яд ищ оф рж фа пы иж ещ шл аи йн " +
  "хр хн бн яс фе вт рь мп иф бы шн чь оя йш ощ мл ке дл кв яг лн пт ее сч мя пя " +
  "дя рш оу иш хв рч ьт ыг яж нг сх ют йк пн ср цо еи ых ъе оц ыд рб чо ын эк яч " +
  "вп як юб ям дп сц бс шт уе ым рх юч ая ыч сш тч ея ау ыб вд фр дч тп мб яе еф " +
  "зж шь еу дь щу яр тм ыз жу рп мм еа мк сб жо кц жк ьм зя рл тт эл шу зк ях лт " +
  "рю пс рз фл сг ху пь бщ уа чт дм юр юд шо тд хт рр бм нф пп вь ою ею ью рц дц " +
  "фу дж тб ъя дш бъ йт хм бк вм лз йм ьц ыж сд бв дт яц сф юн нз вв пч тю эт йд " +
  "вч зь ьз цв лг дг ьш пк ял бь зъ яб мс бя юк кк лд лч вщ рщ лб мр иу шп зт дд " +
  "жг жь жм юс дб эр фт оа юм ню ьщ тг ьч юз бд уи лж жж мч ьд кш нв шв лс яп бж " +
  "щн оэ дз яй уф ао рф ыщ эп юх уй хс ьи юл дю эм съ юш эн чл бт йч цк эс сж тш " +
  "гч цы вц мь уя зз аэ нщ нж гш гм ьв ьб йц гв мф гк хш ии зш зч хе лв дъ бх бю " +
  "юж фф йл уц вб жр кз вг тх нш шм сю ьг нр тщ ьо лм тц бц юг уо нх лп чр ьф бч " +
  "бб хч яш ию гс ыя мц бз юц йо пц эв дх бш хк фс фм пш чм мщ гд хг фн въ эф тз " +
  "тъ бг щр хп жб чш мв ые вх чв ьп юй йр цу вж тф йб ыц жл мт тж йщ йф уэ шю зю " +
  "яи мг юп ъю фы ыу ыи мш";
begin
 // Получаем тестируемые строки
 if Length(Trim(S))>LengthText then
   T1 := Copy(Trim(S), 1, LengthText) else T1 := Trim(S);
 T2 := OemToAnsiStr(T1);
 // Преобразовываем текст к нижнему регистру
 T1 := AnsiLowerCase(T1);
 T2 := AnsiLowerCase(T2);
 // Обнуляем счетчики
 Count1 := 0;
 Count2 := 0;
 // Организовываем цикл по числу слогов
 for I:=1 to Length(T1)-1 do begin
   Tmp := Copy(T1, I, 2);
   if Pos(Tmp, RussianText)<> 0 then Inc(Count1);
   Tmp := Copy(T2, I, 2);
   if Pos(Tmp, RussianText)<> 0 then Inc(Count2);
 end;
 // Результат
 Result := Count1 >= Count2;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.468 c
14-1092119052
Slider007
2004-08-10 10:24
2004.08.29
Обжимка витой пары


14-1091855407
Daniel.
2004-08-07 09:10
2004.08.29
Что делать, если USB-устройств больше, чем USB-портов?


6-1088324258
Scordion
2004-06-27 12:17
2004.08.29
Компонент для скачивания файлов!


1-1091422420
Konsul
2004-08-02 08:53
2004.08.29
DLL


14-1092225719
Тень отца Жука
2004-08-11 16:01
2004.08.29
Михайличенко уволен. Вместе него Сабо