информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Да, действительно, в D4 этого нет, сорри 30.11.01 12:20  Число просмотров: 1293
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> Такой возможности нет. В NMPOP3.MailMessage*нет
> ContentType. :( Delphi 4.

NMPOP3.MailMessage.Head - заголовок письма
ContentType - просто более удобный способ получения информации о типе содержимого письма(есть в D5), но все это можно найти в заголовке письма(Head)

Applies to
TMailMessage object

Declaration
property Head: TExStringList;

Description
The Head property contains the header of the current mail message.
свойство Head содержит заголовок текущего сообщения

Accessability: Runtime, Read-only
<programming>
Delphi. Вопрос. 27.11.01 03:09  
Автор: Ммарина. Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Очень нужна ваша помощь, мальчики. При приемё e-mail сообщения через NMPOP3 на Delphi 4 возникает проблема: русский текст не читается. Что нужно вписать в программу, чтобы он читался? Если не сложно, напишите здесь, поиском и help'ом я уже пользовалась.
Заранее спасибо :)
уже сказано - см. хидер письма + таблицы перекодировки (см. внутри) 28.11.01 22:57  
Автор: free Статус: Незарегистрированный пользователь
<"чистая" ссылка>
# возращает перекодированную переменную, вызов wintokoi(<переменная>)
sub wintokoi {
my $pvdcoderwin=shift;
$pvdcoderwin=~ tr/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1/;
return $pvdcoderwin;
}

sub koitowin {
my $pvdcoderwin=shift;
$pvdcoderwin=~ tr/\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/;
return $pvdcoderwin;
}

# возращает перекодированную переменную, вызов wintoiso(<переменная>)
sub wintoiso {
my $pvdcoderiso=shift;
$pvdcoderiso=~ tr/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/;
return $pvdcoderiso;
}

sub isotowin {
my $pvdcoderiso=shift;
$pvdcoderiso=~ tr/\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/;
return $pvdcoderiso;
}

# возращает перекодированную переменную, вызов wintodos(<переменная>)
sub wintodos {
my $pvdcoderdos=shift;
$pvdcoderdos=~ tr/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/;
return $pvdcoderdos;
}

sub dostowin {
my $pvdcoderdos=shift;
$pvdcoderdos=~ tr/\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/;
return $pvdcoderdos;
}
уже сказано - см. хидер письма + таблицы перекодировки (см. внутри) 09.12.01 02:37  
Автор: Ммарина. Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> # возращает перекодированную переменную, вызов
> wintokoi(<переменная>)
> sub wintokoi {
> my $pvdcoderwin=shift;
> $pvdcoderwin=~
> tr/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD
> \xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xD
> C\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\x
> EB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\
> xFA\xFB\xFC\xFD\xFE\xFF/\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE
> 9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\x
> FE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xC1\xC2\xD7\xC7\xC4\xC5\
> xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6
> \xC8\xC3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1/;
> return $pvdcoderwin;
> }
>
> sub koitowin {
> my $pvdcoderwin=shift;
> $pvdcoderwin=~
> tr/\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE
> \xEF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF
> 8\xFC\xE0\xF1\xC1\xC2\xD7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\x
> CC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\
> xDF\xD9\xD8\xDC\xC0\xD1/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC
> 8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\x
> D7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\
> xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4
> \xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/;
> return $pvdcoderwin;
> }
>
> # возращает перекодированную переменную, вызов
> wintoiso(<переменная>)
> sub wintoiso {
> my $pvdcoderiso=shift;
> $pvdcoderiso=~
> tr/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD
> \xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xD
> C\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\x
> EB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\
> xFA\xFB\xFC\xFD\xFE\xFF/\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB
> 8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\x
> C7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\
> xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4
> \xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/;
> return $pvdcoderiso;
> }
>
> sub isotowin {
> my $pvdcoderiso=shift;
> $pvdcoderiso=~
> tr/\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD
> \xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xC
> C\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\x
> DB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\
> xEA\xEB\xEC\xED\xEE\xEF/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC
> 8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\x
> D7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\
> xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4
> \xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/;
> return $pvdcoderiso;
> }
>
> # возращает перекодированную переменную, вызов
> wintodos(<переменная>)
> sub wintodos {
> my $pvdcoderdos=shift;
> $pvdcoderdos=~
> tr/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD
> \xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xD
> C\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\x
> EB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\
> xFA\xFB\xFC\xFD\xFE\xFF/\x80\x81\x82\x83\x84\x85\x86\x87\x8
> 8\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x
> 97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\
> xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4
> \xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF/;
> return $pvdcoderdos;
> }
>
> sub dostowin {
> my $pvdcoderdos=shift;
> $pvdcoderdos=~
> tr/\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D
> \x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9
> C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\x
> AB\xAC\xAD\xAE\xAF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\
> xEA\xEB\xEC\xED\xEE\xEF/\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC
> 8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\x
> D7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\
> xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4
> \xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF/;
> return $pvdcoderdos;
> }


И как этим пользоваться?
:(
уже сказано - см. хидер письма + таблицы перекодировки (см. внутри) 09.12.01 06:19  
Автор: free Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> И как этим пользоваться?
> :(

Это очень просто - смотришь в какой кодировке пришло сообщение (как это сделать в delphi - я не знаю),
и начинаешь перекодировать символы сообщения из этой кодировки в кодировку windows-1251.

для этого понадобится завести массивы длины 64 символа (или двумерный массив в котором строки - массивы из 64 символов - буквы которые нужно перекодировать, а столбцы - кодировка (dos,iso,koi8 и т.д.))
(потому что в русском алфавите 32 буквы, если я не ошибаюсь),
а символы брать из таблиц перекодировки, которую я привел выше
(это строка вида \хYY - это символ в определенной кодировке, записаный в 16-ричном формате, соответственно для каждой кодировки есть символ, в windows-1251, в который он должен быть преобразован).

чтобы было более понятно - tr/ \xYY / \xZZ /;
- это регулярное выражение perl'а (читай - функция в delphi), которое на место символа с 16ричным кодом YY ставит символ с 16ричным кодом ZZ

Лобовое решение - очевидно.

Если лень самой строить таблицы перекодировок, найди сайт "Королевство Дельфи" - прямо и введи такую строку в любой поисковой системе.
Не читается ни в одной кодировке(win koi)? 27.11.01 17:23  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
...:( 28.11.01 00:04  
Автор: Ммарина. Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Если письмо на английском языке, читается нормально. На русском же - не читается. Важно, чтобы программа сама определяла русский текст, без посторонней помощи.
Поизучай заголовок письма 28.11.01 16:04  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> Если письмо на английском языке, читается нормально. На
> русском же - не читается. Важно, чтобы программа сама
> определяла русский текст, без посторонней помощи.

Попробуй выведи эту строчку на экран и посмотри кодировку в которой
приходит письмо

NMPOP.MailMessage.ContentType

должно быть что-то похожее на эту строку
Content-Type: text/plain; charset=koi8-r
ну а в зависимости от charset преобразуй текст для вывода на экран
Поизучай заголовок письма 30.11.01 00:44  
Автор: Ммарина. Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Если письмо на английском языке, читается нормально.
> На
> > русском же - не читается. Важно, чтобы программа сама
> > определяла русский текст, без посторонней помощи.
>
> Попробуй выведи эту строчку на экран и посмотри кодировку в
> которой
> приходит письмо
>
> NMPOP.MailMessage.ContentType
>
> должно быть что-то похожее на эту строку
> Content-Type: text/plain; charset=koi8-r
> ну а в зависимости от charset преобразуй текст для вывода
> на экран

Такой возможности нет. В NMPOP3.MailMessage*нет ContentType. :( Delphi 4.
Да, действительно, в D4 этого нет, сорри 30.11.01 12:20  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> Такой возможности нет. В NMPOP3.MailMessage*нет
> ContentType. :( Delphi 4.

NMPOP3.MailMessage.Head - заголовок письма
ContentType - просто более удобный способ получения информации о типе содержимого письма(есть в D5), но все это можно найти в заголовке письма(Head)

Applies to
TMailMessage object

Declaration
property Head: TExStringList;

Description
The Head property contains the header of the current mail message.
свойство Head содержит заголовок текущего сообщения

Accessability: Runtime, Read-only
...?:) 01.12.01 00:20  
Автор: Ммарина. Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Такой возможности нет. В NMPOP3.MailMessage*нет
> > ContentType. :( Delphi 4.
>
> NMPOP3.MailMessage.Head - заголовок письма
> ContentType - просто более удобный способ получения
> информации о типе содержимого письма(есть в D5), но все это
> можно найти в заголовке письма(Head)
>
> Applies to
> TMailMessage object
>
> Declaration
> property Head: TExStringList;
>
> Description
> The Head property contains the header of the current mail
> message.
> свойство Head содержит заголовок текущего сообщения
>
> Accessability: Runtime, Read-only

И что с ним делать? Как же получить письмо в правильной кодировке? Куда вписать "Head"? Может быть, пример напишете?:)
...?:( 09.12.01 01:56  
Автор: Ммарина. Статус: Незарегистрированный пользователь
<"чистая" ссылка>
:(
Поможете вы мне, напишете пример?:(
самой значит лень?! 09.12.01 06:30  
Автор: free Статус: Незарегистрированный пользователь
<"чистая" ссылка>
<TITLE>«Королевство Dельфи» Виртуальный клуб программистов</TITLE>
<META NAME="keywords" CONTENT="delphi programmer programm programming
club delphi hint дельфи программист программирование программа виртуальный
клуб дельфи советы компоненты взаимопомощь дельфи delphi">
<META NAME="description" CONTENT="Delphi Programmer Club. Using hints.
Виртуальный клуб программистов на Дельфи. Использование всплывающих подсказок">

<LINK HREF="../delphi.css" REL="STYLESHEET" TYPE="text/css">
</HEAD>
<BODY CLASS="Main" BGCOLOR="#FFFFFF">

<TABLE WIDTH=100%>
<TD ALIGN=LEFT VALIGN=TOP COLSPAN=0 ROWSPAN=0>
<IMG SRC="../images/treasure.gif" WIDTH=448 HEIGHT=87 BORDER=0 ALT="Королевство Дельфи">
</TD>
<TD ALIGN=RIGHT VALIGN=TOP >
<FONT COLOR="666666">
"Knowledge itself is power"<BR>
F.Bacon

</FONT>
</TD>
</TABLE>

<A NAME="conten"></A>
<TABLE WIDTH="100%"><TR><TD ALIGN="CENTER" BGCOLOR="#FFCC99">Разное</TD></TR></TABLE>
<DIV ALIGN="CENTER">Таблицы перекодировки Win1251 - KOI8 и их применение.</DIV>
<P ALIGN="right">Вернуться к разделу <A HREF="index.htm">Сокровищница</A><BR>
к разделу <A HREF="s003.htm">Разное</A></P>

<A HREF="#_1">Вариант №1</A> (17.01.00)<BR>
<A HREF="#_2">Вариант №2</A> (21.01.00)<BR>
<A HREF="#_3">Вариант №3</A> (31.01.00)<BR>
<A HREF="#_4">Вариант №4</A> (31.01.00)<BR>

<P></P>
<HR><A NAME="_4"></A>
Вариант №3 (31.01.00) Автор: <A HREF="mailto:eremeev@mdvor.ru">Еремеев Алексей</A>
<P></P>
const
  Koi  =
'юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ';
  Win  =
'бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС';
  SerH = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  SerL = 'абвгдежзийклмнопрстуфхцчшщъыьэюя';

procedure ANSI2KOI(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $B8 then Str[i] := char($A3) else
    if k = $A8 then Str[i] := char($B3) else
    if k > $BF then Str[i] := Win[k - $BF];
  end;
end;

procedure KOI2ANSI(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $A3 then Str[i] := 'ё' else
    if k = $B3 then Str[i] := 'Ё' else
    if k > $BF then Str[i] := Koi[k - $BF];
  end;
end;

procedure ANSI2IBM(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $B8 then Str[i] := char($F1) else
    if k = $A8 then Str[i] := char($F0) else
    if k > $EF then Str[i] := char(k - 16) else
    if (k > $BF) and (k < $F0) then Str[i] := char(k - 64);
  end;
end;

procedure IBM2ANSI(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $F0 then Str[i] := 'Ё' else
    if k = $F1 then Str[i] := 'ё' else
    if (k > $7F) and (k < $A0) then Str[i] := SerH[k - $7F] else
    if (k > $9F) and (k < $B0) then Str[i] := SerL[k - $9F] else
    if (k > $DF) and (k < $F0) then Str[i] := SerL[k - $CF];
  end;
end;

procedure ANSI2Mac(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $A8 then Str[i] := char($DD) else
    if k = $B8 then Str[i] := char($DE) else
    if k = $FF then Str[i] := char($DF) else
    if (k > $BF) and (k < $E0) then Str[i] := char(k - 64);
  end;
end;

procedure Mac2ANSI(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $DD then Str[i] := 'Ё' else
    if k = $DE then Str[i] := 'ё' else
    if k = $DF then Str[i] := 'я' else
    if (k > $7F) and (k < $A0) then Str[i] := SerH[k - $7F] else
    if (k > $DF) and (k < $FF) then Str[i] := SerL[k - $DF];
  end;
end;

procedure ANSI2ISO(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $A8 then Str[i] := char($A1) else
    if k = $B8 then Str[i] := char($F1) else
    if k > $BF then Str[i] := char(k - 16);
  end;
end;

procedure ISO2ANSI(var Str: string);
var i: integer; k: byte;
begin
  for i := 1 to Length(Str) do begin
    k := byte(Str[i]);
    if k = $A1 then Str[i] := 'Ё' else
    if k = $F1 then Str[i] := 'ё' else
    if k < $F0 then begin
      if k > $CF then Str[i] := SerL[k - $CF] else
      if k > $AF then Str[i] := SerH[k - $AF];
    end;
  end;
end;

---
<P></P>
<A HREF="#conten"><FONT COLOR="666666">Вернуться наверх</FONT></A>
<!--- End track --->

<P></P>
<HR><A NAME="_3"></A>
Вариант №3 (31.01.00) Автор: <A HREF="mailto:nekhoroshkov@novolabs.ru">Constantin G. Nekhoroshkov</A>
<P></P>
Предлагаю всеобщему вниманию вот такой вот unit. Он решает проблемы
конвертации не только Win1251->KOI8 но и конвертации в другие
кодировки.
//---Begin of Unit RusChar
Unit RusChar;
interface
        Function ALT2ISO(Ch1: byte): byte;
        Function ALT2KOI(Ch1: byte): byte;
        Function ALT2MAC(Ch1: byte): byte;
        Function ALT2WIN(Ch1: byte): byte;
        Function ISO2ALT(Ch1: byte): byte;
        Function ISO2KOI(Ch1: byte): byte;
        Function ISO2MAC(Ch1: byte): byte;
        Function ISO2WIN(Ch1: byte): byte;
        Function KOI2ALT(Ch1: byte): byte;
        Function KOI2ISO(Ch1: byte): byte;
        Function KOI2MAC(Ch1: byte): byte;
        Function KOI2WIN(Ch1: byte): byte;
        Function MAC2ALT(Ch1: byte): byte;
        Function MAC2ISO(Ch1: byte): byte;
        Function MAC2KOI(Ch1: byte): byte;
        Function MAC2WIN(Ch1: byte): byte;
        Function WIN2ALT(Ch1: byte): byte;
        Function WIN2ISO(Ch1: byte): byte;
        Function WIN2KOI(Ch1: byte): byte;
        Function WIN2MAC(Ch1: byte): byte;
        Function ConvertString(InputString: string; Convert_Flag: byte): string;
implementation
Const
   //Alt decode contants
   ALT_2_ISO=1;
   ALT_2_KOI=2;
   ALT_2_MAC=3;
   ALT_2_WIN=4;
   //Iso decode contants
   ISO_2_ALT=5;
   ISO_2_KOI=6;
   ISO_2_MAC=7;
   ISO_2_WIN=8;
   //Koi decode contants
   KOI_2_ALT=9;
   KOI_2_ISO=10;
   KOI_2_MAC=11;
   KOI_2_WIN=12;
   //Mac decode contants
   MAC_2_ALT=13;
   MAC_2_ISO=14;
   MAC_2_KOI=15;
   MAC_2_WIN=16;
   //Win decode contants
   WIN_2_ALT=17;
   WIN_2_ISO=18;
   WIN_2_KOI=19;
   WIN_2_MAC=20;
   ALTTable: array [1..64] of byte =(
                                     128, 129, 130, 131, 132, 133, 134, 135,
                                     136, 137, 138, 139, 140, 141, 142, 143,
                                     144, 145, 146, 147, 148, 149, 150, 151,
                                     152, 153, 154, 155, 156, 157, 158, 159,
                                     160, 161, 162, 163, 164, 165, 166, 167,
                                     168, 169, 170, 171, 172, 173, 174, 175,
                                     224, 225, 226, 227, 228, 229, 230, 231,
                                     232, 233, 234, 235, 236, 237, 238, 239
                                     );
   ISOTable: array [1..64] of byte =(
                                     176, 177, 178, 179, 180, 181, 182, 183,
                                     184, 185, 186, 187, 188, 189, 190, 191,
                                     192, 193, 194, 195, 196, 197, 198, 199,
                                     200, 201, 202, 203, 204, 205, 206, 207,
                                     208, 209, 210, 211, 212, 213, 214, 215,
                                     216, 217, 218, 219, 220, 221, 222, 223,
                                     224, 225, 226, 227, 228, 229, 230, 231,
                                     232, 233, 234, 235, 236, 237, 238, 239
                                    );
   KOITable: array [1..64] of byte =(
                                     225, 226, 247, 231, 228, 229, 246, 250,
                                     233, 234, 235, 236, 237, 238, 239, 240,
                                     242, 243, 244, 245, 230, 232, 227, 254,
                                     251, 253, 255, 249, 248, 252, 224, 241,
                                     193, 194, 215, 199, 196, 197, 214, 218,
                                     201, 202, 203, 204, 205, 206, 207, 208,
                                     210, 211, 212, 213, 198, 200, 195, 222,
                                     219, 221, 223, 217, 216, 220, 192, 209
                                    );
   MACTable: array [1..64] of byte =(
                                     128, 129, 130, 131, 132, 133, 134, 135,
                                     136, 137, 138, 139, 140, 141, 142, 143,
                                     144, 145, 146, 147, 148, 149, 150, 151,
                                     152, 153, 154, 155, 156, 157, 158, 159,
                                     224, 225, 226, 227, 228, 229, 230, 231,
                                     232, 233, 234, 235, 236, 237, 238, 239,
                                     240, 241, 242, 243, 244, 245, 246, 247,
                                     248, 249, 250, 251, 252, 253, 254, 223
                                     );
   WINTable: array [1..64] of byte =(
                                     192, 193, 194, 195, 196, 197, 198, 199,
                                     200, 201, 202, 203, 204, 205, 206, 207,
                                     208, 209, 210, 211, 212, 213, 214, 215,
                                     216, 217, 218, 219, 220, 221, 222, 223,
                                     224, 225, 226, 227, 228, 229, 230, 231,
                                     232, 233, 234, 235, 236, 237, 238, 239,
                                     240, 241, 242, 243, 244, 245, 246, 247,
                                     248, 249, 250, 251, 252, 253, 254, 255
                                     );

Function ALT2ISO(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ALTTable[i]=ch1 then begin
   ALT2ISO:=ISOtable[i];
   exit;
  end;
 end;
 ALT2ISO:=ch1;
end;
Function ALT2KOI(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ALTTable[i]=ch1 then begin
   ALT2KOI:=KOItable[i];
   exit;
  end;
 end;
 ALT2KOI:=ch1;
end;
Function ALT2MAC(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ALTTable[i]=ch1 then begin
   ALT2MAC:=MACtable[i];
   exit;
  end;
 end;
 ALT2MAC:=ch1;
end;
Function ALT2WIN(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ALTTable[i]=ch1 then begin
   ALT2WIN:=WINtable[i];
   exit;
  end;
 end;
 ALT2WIN:=ch1;
end;
Function ISO2ALT(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ISOTable[i]=ch1 then begin
   ISO2ALT:=ALTtable[i];
   exit;
  end;
 end;
 ISO2ALT:=ch1;
end;
Function ISO2KOI(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ISOTable[i]=ch1 then begin
   ISO2KOI:=KOItable[i];
   exit;
  end;
 end;
 ISO2KOI:=ch1;
end;
Function ISO2MAC(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ISOTable[i]=ch1 then begin
   ISO2MAC:=MACtable[i];
   exit;
  end;
 end;
 ISO2MAC:=ch1;
end;
Function ISO2WIN(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If ISOTable[i]=ch1 then begin
   ISO2WIN:=WINtable[i];
   exit;
  end;
 end;
 ISO2WIN:=ch1;
end;
Function KOI2ALT(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If KOITable[i]=ch1 then begin
   KOI2ALT:=ALTtable[i];
   exit;
  end;
 end;
 KOI2ALT:=ch1;
end;
Function KOI2ISO(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If KOITable[i]=ch1 then begin
   KOI2ISO:=ISOtable[i];
   exit;
  end;
 end;
 KOI2ISO:=ch1;
end;
Function KOI2MAC(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If KOITable[i]=ch1 then begin
   KOI2MAC:=MACtable[i];
   exit;
  end;
 end;
 KOI2MAC:=ch1;
end;
Function KOI2WIN(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If KOITable[i]=ch1 then begin
   KOI2WIN:=WINtable[i];
   exit;
  end;
 end;
 KOI2WIN:=ch1;
end;
Function MAC2ALT(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If MACTable[i]=ch1 then begin
   MAC2ALT:=ALTtable[i];
   exit;
  end;
 end;
 MAC2ALT:=ch1;
end;
Function MAC2ISO(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If MACTable[i]=ch1 then begin
   MAC2ISO:=ISOtable[i];
   exit;
  end;
 end;
 MAC2ISO:=ch1;
end;
Function MAC2KOI(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If MACTable[i]=ch1 then begin
   MAC2KOI:=KOItable[i];
   exit;
  end;
 end;
 MAC2KOI:=ch1;
end;
Function MAC2WIN(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If MACTable[i]=ch1 then begin
   MAC2WIN:=WINtable[i];
   exit;
  end;
 end;
 MAC2WIN:=ch1;
end;
Function WIN2ALT(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If WINTable[i]=ch1 then begin
   WIN2ALT:=ALTtable[i];
   exit;
  end;
 end;
 WIN2ALT:=ch1;
end;
Function WIN2ISO(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If WINTable[i]=ch1 then begin
   WIN2ISO:=ISOtable[i];
   exit;
  end;
 end;
 WIN2ISO:=ch1;
end;
Function WIN2KOI(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If WINTable[i]=ch1 then begin
   WIN2KOI:=KOItable[i];
   exit;
  end;
 end;
 WIN2KOI:=ch1;
end;
Function WIN2MAC(Ch1: byte): byte;
Var
 i: byte;
begin
 For i:=1 to 64 do begin
  If WINTable[i]=ch1 then begin
   WIN2MAC:=MACtable[i];
   exit;
  end;
 end;
 WIN2MAC:=ch1;
end;

Function ConvertString(InputString: string; Convert_Flag: byte): string;
Var
           i: word;
 ConvertByte: byte;
begin
   ConvertString:='';
   If InputString='' then exit;
   for i:=1 to length(InputString) do begin
    ConvertByte:=ord(InputString[i]);
    Case Convert_Flag of

     ALT_2_ISO: ConvertByte:=Alt2Iso(ConvertByte);
     ALT_2_KOI: ConvertByte:=Alt2Koi(ConvertByte);
     ALT_2_MAC: ConvertByte:=Alt2Mac(ConvertByte);
     ALT_2_WIN: ConvertByte:=Alt2Win(ConvertByte);

     ISO_2_ALT: ConvertByte:=Iso2Alt(ConvertByte);
     ISO_2_KOI: ConvertByte:=Iso2Koi(ConvertByte);
     ISO_2_MAC: ConvertByte:=Iso2Mac(ConvertByte);
     ISO_2_WIN: ConvertByte:=Iso2Win(ConvertByte);

     KOI_2_ALT: ConvertByte:=Koi2Alt(ConvertByte);
     KOI_2_ISO: ConvertByte:=Koi2Iso(ConvertByte);
     KOI_2_MAC: ConvertByte:=Koi2Mac(ConvertByte);
     KOI_2_WIN: ConvertByte:=Koi2Win(ConvertByte);

     MAC_2_ALT: ConvertByte:=Mac2Alt(ConvertByte);
     MAC_2_ISO: ConvertByte:=Mac2Iso(ConvertByte);
     MAC_2_KOI: ConvertByte:=Mac2Koi(ConvertByte);
     MAC_2_WIN: ConvertByte:=Mac2Win(ConvertByte);

     WIN_2_ALT: ConvertByte:=Win2Alt(ConvertByte);
     WIN_2_ISO: ConvertByte:=Win2Iso(ConvertByte);
     WIN_2_KOI: ConvertByte:=Win2Koi(ConvertByte);
     WIN_2_MAC: ConvertByte:=Win2Mac(ConvertByte);

    end;
    InputString[i]:=chr(ConvertByte);
   end;
   ConvertString:=InputString;
end;


begin
end.
//---End of Unit RusChar

---
<P></P>
<A HREF="#conten"><FONT COLOR="666666">Вернуться наверх</FONT></A>
<!--- End track --->



<P></P>
<HR><A NAME="_2"></A>
Вариант №2 (21.01.00) Автор: <A HREF="mailto:VUK@fcenter.ru">Алексей Вуколов</A>
<P></P>
Этот вариант несколько более
длинный (в плане размера таблиц перекодировки), но зато, как мне кажется,
более универсальный (и, возможно, более быстрый).
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
type
    PCharRecodeTable = ^TCharRecodeTable;
    TCharRecodeTable = array[ #0..#255 ] of char;

const
     WinToKOI8Table : TCharRecodeTable  =
(#$00, #$01, #$02, #$03, #$04, #$05, #$06, #$07, #$08, #$09, #$0A, #$0B, #$0C, #$0D, #$0E, #$0F,
 #$10, #$11, #$12, #$13, #$14, #$15, #$16, #$17, #$18, #$19, #$1A, #$1B, #$1C, #$1D, #$1E, #$1F,
 #$20, #$21, #$22, #$23, #$24, #$25, #$26, #$27, #$28, #$29, #$2A, #$2B, #$2C, #$2D, #$2E, #$2F,
 #$30, #$31, #$32, #$33, #$34, #$35, #$36, #$37, #$38, #$39, #$3A, #$3B, #$3C, #$3D, #$3E, #$3F,
 #$40, #$41, #$42, #$43, #$44, #$45, #$46, #$47, #$48, #$49, #$4A, #$4B, #$4C, #$4D, #$4E, #$4F,
 #$50, #$51, #$52, #$53, #$54, #$55, #$56, #$57, #$58, #$59, #$5A, #$5B, #$5C, #$5D, #$5E, #$5F,
 #$60, #$61, #$62, #$63, #$64, #$65, #$66, #$67, #$68, #$69, #$6A, #$6B, #$6C, #$6D, #$6E, #$6F,
 #$70, #$71, #$72, #$73, #$74, #$75, #$76, #$77, #$78, #$79, #$7A, #$7B, #$7C, #$7D, #$7E, #$7F,
 #$80, #$81, #$82, #$83, #$84, #$85, #$86, #$87, #$88, #$89, #$8A, #$8B, #$8C, #$8D, #$8E, #$8F,
 #$90, #$91, #$92, #$93, #$94, #$95, #$96, #$97, #$98, #$99, #$9A, #$9B, #$9C, #$9D, #$9E, #$9F,
 #$A0, #$A1, #$A2, #$A3, #$A4, #$A5, #$A6, #$A7, #$A8, #$A9, #$AA, #$AB, #$AC, #$AD, #$AE, #$AF,
 #$B0, #$B1, #$B2, #$B3, #$B4, #$B5, #$B6, #$B7, #$B8, #$B9, #$BA, #$BB, #$BC, #$BD, #$BE, #$BF,
 #$E1, #$E2, #$F7, #$E7, #$E4, #$E5, #$F6, #$FA, #$E9, #$EA, #$EB, #$EC, #$ED, #$EE, #$EF, #$F0,
 #$F2, #$F3, #$F4, #$F5, #$E6, #$E8, #$E3, #$FE, #$FB, #$FD, #$FF, #$F9, #$F8, #$FC, #$E0, #$F1,
 #$C1, #$C2, #$D7, #$C7, #$C4, #$C5, #$D6, #$DA, #$C9, #$CA, #$CB, #$CC, #$CD, #$CE, #$CF, #$D0,
 #$D2, #$D3, #$D4, #$D5, #$C6, #$C8, #$C3, #$DE, #$DB, #$DD, #$DF, #$D9, #$D8, #$DC, #$C0, #$D1);

     KOI8ToWinTable : TCharRecodeTable =
(#$00, #$01, #$02, #$03, #$04, #$05, #$06, #$07, #$08, #$09, #$0A, #$0B, #$0C, #$0D, #$0E, #$0F,
 #$10, #$11, #$12, #$13, #$14, #$15, #$16, #$17, #$18, #$19, #$1A, #$1B, #$1C, #$1D, #$1E, #$1F,
 #$20, #$21, #$22, #$23, #$24, #$25, #$26, #$27, #$28, #$29, #$2A, #$2B, #$2C, #$2D, #$2E, #$2F,
 #$30, #$31, #$32, #$33, #$34, #$35, #$36, #$37, #$38, #$39, #$3A, #$3B, #$3C, #$3D, #$3E, #$3F,
 #$40, #$41, #$42, #$43, #$44, #$45, #$46, #$47, #$48, #$49, #$4A, #$4B, #$4C, #$4D, #$4E, #$4F,
 #$50, #$51, #$52, #$53, #$54, #$55, #$56, #$57, #$58, #$59, #$5A, #$5B, #$5C, #$5D, #$5E, #$5F,
 #$60, #$61, #$62, #$63, #$64, #$65, #$66, #$67, #$68, #$69, #$6A, #$6B, #$6C, #$6D, #$6E, #$6F,
 #$70, #$71, #$72, #$73, #$74, #$75, #$76, #$77, #$78, #$79, #$7A, #$7B, #$7C, #$7D, #$7E, #$7F,
 #$80, #$81, #$82, #$83, #$84, #$85, #$86, #$87, #$88, #$89, #$8A, #$8B, #$8C, #$8D, #$8E, #$8F,
 #$90, #$91, #$92, #$93, #$94, #$95, #$96, #$97, #$98, #$99, #$9A, #$9B, #$9C, #$9D, #$9E, #$9F,
 #$A0, #$A1, #$A2, #$A3, #$A4, #$A5, #$A6, #$A7, #$A8, #$A9, #$AA, #$AB, #$AC, #$AD, #$AE, #$AF,
 #$B0, #$B1, #$B2, #$B3, #$B4, #$B5, #$B6, #$B7, #$B8, #$B9, #$BA, #$BB, #$BC, #$BD, #$BE, #$BF,
 #$FE, #$E0, #$E1, #$F6, #$E4, #$E5, #$F4, #$E3, #$F5, #$E8, #$E9, #$EA, #$EB, #$EC, #$ED, #$EE,
 #$EF, #$FF, #$F0, #$F1, #$F2, #$F3, #$E6, #$E2, #$FC, #$FB, #$E7, #$F8, #$FD, #$F9, #$F7, #$FA,
 #$DE, #$C0, #$C1, #$D6, #$C4, #$C5, #$D4, #$C3, #$D5, #$C8, #$C9, #$CA, #$CB, #$CC, #$CD, #$CE,
 #$CF, #$DF, #$D0, #$D1, #$D2, #$D3, #$C6, #$C2, #$DC, #$DB, #$C7, #$D8, #$DD, #$D9, #$D7, #$DA);

<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
function RecodeChar( Ch : char; const Table : TCharRecodeTable ) : char;
begin
  Result := Table[ Ch ];
end;
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
function CharWinToKOI8( Ch : char ) : char;
begin
  Result := WinToKOI8Table[ Ch ];
end;
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
function CharKOI8ToWin( Ch : char ) : char;
begin
  Result := KOI8ToWinTable[ Ch ];
end;
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
function RecodeStr( Source : string; const Table : TCharRecodeTable ) : string;
var
   i : integer;
begin
  Result := '';
  for i := 1 to length( Source ) do
    Result := Result + Table[ Source[i] ];
end;
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>

---

<P></P>
<A HREF="#conten"><FONT COLOR="666666">Вернуться наверх</FONT></A>
<!--- End track --->

<HR><A NAME="_1"></A>
Вариант №1 (17.01.00) Автор: <A HREF="mailto:polschanov@katren.ru">Дмитрий В. Полщанов</A>

const
Koi: Array[0..66] of Char = ('Ј', 'Ё', 'ё', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж',
'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р',
'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ',
'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д',
'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о',
'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш',
'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
Win: Array[0..66] of Char = ('ё', 'Ё', 'Ј', 'ю', 'а', 'б', 'ц', 'д', 'е', 'ф',
'г', 'х', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п',
'я', 'р', 'с', 'т', 'у', 'ж', 'в', 'ь', 'ы', 'з',
'ш', 'э', 'щ', 'ч', 'ъ', 'Ю', 'А', 'Б', 'Ц', 'Д',
'Е', 'Ф', 'Г', 'Х', 'И', 'Й', 'К', 'Л', 'М', 'Н',
'О', 'П', 'Я', 'Р', 'С', 'Т', 'У', 'Ж', 'В', 'Ь',
'Ы', 'З', 'Ш', 'Э', 'Щ', 'Ч', 'Ъ');
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
function WinToKoi(Str: String): String;
var
i, j, Index: Integer;
begin
Result := '';

for i := 1 to Length(Str) do
begin
Index := -1;
for j := Low(Win) to High(Win) do
if Win[j] = Str[i] then
begin
Index := j;
Break;
end;

if Index = -1 then Result := Result + Str[i]
else Result := Result + Koi[Index];
end;
end;
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
function KoiToWin(Str: String): String;
var
i, j, Index: Integer;
begin
Result := '';

for i := 1 to Length(Str) do
begin
Index := -1;
for j := Low(Win) to High(Win) do
if Koi[j] = Str[i] then
begin
Index := j;
Break;
end;

if Index = -1 then Result := Result + Str[i]
else Result := Result + Win[Index];
end;
end;
<FONT COLOR="#000099">//---------------------------------------------------------------------------</FONT>
procedure SendFileOnSMTP(Host: String;
Port: Integer;
Subject,
FromAddress, ToAddress,
Body,
FileName: String);
var
NMSMTP: TNMSMTP;
begin
if DelSpace(ToAddress) = '' then Exit;
if ToAddress[1] = ';' then Exit;

if (DelSpace(FileName) <> '') and not FileExists(FileName) then
raise Exception.Create('SendFileOnSMTP: file not exist: ' + FileName);

NMSMTP := TNMSMTP.Create(nil);
try
NMSMTP.Host := Host;
NMSMTP.Port := Port;
NMSMTP.Charset := 'koi8-r';
NMSMTP.PostMessage.FromAddress := FromAddress;
NMSMTP.PostMessage.ToAddress.Text := ToAddress;
NMSMTP.PostMessage.Attachments.Text := FileName;
NMSMTP.PostMessage.Subject := Subject;
NMSMTP.PostMessage.Date := DateTimeToStr(Now);
NMSMTP.UserID := 'netmaster';
NMSMTP.PostMessage.Body.Text := WinToKoi(Body);
NMSMTP.FinalHeader.Clear;
NMSMTP.TimeOut := 5000;
NMSMTP.Connect;
NMSMTP.SendMail;
NMSMTP.Disconnect;
finally
NMSMTP.Free;
end;
end;
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach