Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c