Kniga-Online.club
» » » » Bob Swart - Интернет решения от доктора Боба

Bob Swart - Интернет решения от доктора Боба

Читать бесплатно Bob Swart - Интернет решения от доктора Боба. Жанр: Программирование издательство неизвестно, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

Подобно набору символов XXencode, набор символов Base64 не является подмножеством набора символов ASCII.

Это означает, что мы должны добавить массив преобразования в набор символов Base64 и также преобразовать процедуры Triplet2Kwartet и Kwartet2Triplet для поддержки данного алгоритма:

 const

   B64: Array[0..63] of Char =

      'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

 procedure Triplet2Kwartet(Const Triplet: TTriplet; var Kwartet: TKwartet);

 var

   i: Integer;

 begin

   Kwartet[0] := (Triplet[0] SHR 2);

   Kwartet[1] := ((Triplet[0] SHL 4) AND $30) +

                 ((Triplet[1] SHR 4) AND $0F);

   Kwartet[2] := ((Triplet[1] SHL 2) AND $3C) +

                 ((Triplet[2] SHR 6) AND $03);

   Kwartet[3] := (Triplet[2] AND $3F);

   for i:=0 to 3 do

     if Kwartet[i] = 0 then Kwartet[i] := $40 + Ord(SP)

     else Inc(Kwartet[i],Ord(SP));

   if Base64 then

     for i:=0 to 3 do

       Kwartet[i] := Ord(B64[(Kwartet[i] - Ord(SP)) mod $40])

   else

     if XXCode then

       for i:=0 to 3 do

         Kwartet[i] := Ord(XX[(Kwartet[i] - Ord(SP)) mod $40])

 end {Triplet2Kwartet};

 procedure Kwartet2Triplet(Kwartet: TKwartet; var Triplet: TTriplet);

 var

   i: Integer;

 begin

   if Base64 then

   begin

     for i:=0 to 3 do

     begin

       case Chr(Kwartet[i]) of

        'A'..'Z': Kwartet[i] := 0 + Kwartet[i]

                                  - Ord('A') + Ord(SP);

        'a'..'z': Kwartet[i] := 26+ Kwartet[i]

                                  - Ord('a') + Ord(SP);

        '0'..'9': Kwartet[i] := 52+ Kwartet[i]

                                  - Ord('0') + Ord(SP);

             '+': Kwartet[i] := 62+ Ord(SP);

             '/': Kwartet[i] := 63+ Ord(SP);

       end

     end

   end

   else

   if XXCode then

   begin

     for i:=0 to 3 do

     begin

       case Chr(Kwartet[i]) of

             '+': Kwartet[i] := 0 + Ord(SP);

             '-': Kwartet[i] := 1 + Ord(SP);

        '0'..'9': Kwartet[i] := 2 + Kwartet[i]

                                  - Ord('0') + Ord(SP);

        'A'..'Z': Kwartet[i] := 12 + Kwartet[i]

                                   - Ord('A') + Ord(SP);

        'a'..'z': Kwartet[i] := 38 + Kwartet[i]

                                   - Ord('a') + Ord(SP)

       end

     end

   end;

   Triplet[0] :=  ((Kwartet[0] - Ord(SP)) SHL 2) +

                 (((Kwartet[1] - Ord(SP)) AND $30) SHR 4);

   Triplet[1] := (((Kwartet[1] - Ord(SP)) AND $0F) SHL 4) +

                 (((Kwartet[2] - Ord(SP)) AND $3C) SHR 2);

   Triplet[2] := (((Kwartet[2] - Ord(SP)) AND $03) SHL 6) +

                  ((Kwartet[3] - Ord(SP)) AND $3F)

 end {Kwartet2Triplet};

Заметим, что в новой версии появилась новая глобальная переменная, которая используется для определения формата кодирования.

1.1.4. MIME

MIME означает Multipurpose Internet Mail Extensions (Расширение форматов Интернет почты), в котором международным стандартом является кодирование Base64. Данное расширение было разработано для многоязычной поддержки и преобразования символов между системами (такими как IBM мейнфреймы, системы на базе UNIX, Macintosh и IBM PC).

MIME алгоритм кодирования базируется на RFC1341 как MIME Base64. Подобно UUencode, назначение MIME кодировать двоичные файлы так, что бы они смогли пройти через различные почтовые системы, и MIME использует для этого алгоритм кодирования Base64, плюс набор специальных ключевых слов и опций, которые используются для более детализированной информации о содержимом MIME.

1.1.5. TBUUCode компонент

Определение интерфейса компонента TUUCode, базируется на ранее приведенных и объясненных процедур Triplet2Kwartet и Kwartet2Triplet, заметим, что ниже приведенный код использует условное компилирование в зависимости от версий Delphi и C++Builder.

unit UUCode;

 interface

 uses

 {$IFDEF WIN32}

   Windows,

 {$ELSE}

   WinTypes, WinProcs,

 {$ENDIF}

   SysUtils, Messages, Classes, Graphics, Controls, Forms;

 {$IFNDEF WIN32}

 type

   ShortString = String;

 {$ENDIF}

 type

   EUUCode = class(Exception);

   TAlgorithm = (filecopy, uuencode, uudecode, xxencode, xxdecode, Base64encode, Base64decode);

   TUnixCRLF = (CRLF, LF);

   TProgressEvent = procedure(Percent:Word) of Object;

   TBUUCode = class(TComponent)

   public

   { Public class declarations (override) }

     constructor Create(AOwner: TComponent); override;

   private

   { Private field declarations }

     FAbout: ShortString;

     FActive: Boolean;

     FAlgorithm: TAlgorithm;

     FFileMode: Word;

     FHeaders: Boolean;

     FInputFileName: TFileName;

     FOutputFileName: TFileName;

     FOnProgress: TProgressEvent;

     FUnixCRLF: TUnixCRLF;

   { Dummy method to get read-only About property }

     procedure Dummy(Ignore: ShortString);

   protected

   { Protected Activate method }

     procedure Activate(GoActive: Boolean);

   public

   { Public UUCode interface declaration }

     procedure UUCode;

   published

   { Published design declarations }

     property About: ShortString read FAbout write Dummy;

     property Active: Boolean read FActive write Activate;

     property Algorithm: TAlgorithm read Falgorithm write FAlgorithm;

     property FileMode: Word read FFileMode write FFileMode;

     property Headers: Boolean read FHeaders write FHeaders;

     property InputFile: TFileName read FInputFileName write FInputFileName;

     property OutputFile: TFileName read FOutputFileName write FOutputFileName;

     property UnixCRLF: TUnixCRLF read FUnixCRLF write FUnixCRLF;

   published

   { Published Event property }

     property OnProgress: TProgressEvent read FOnProgress write FOnProgress;

   end {TUUCode};

1.1.6. Свойства

TUUCode компонент имеет восемь опубликованных свойств (мы здесь опустим описание обработчиков событий):

Свойство About содержит информацию о правах и версии.

Свойство Active может использоваться для вызова преобразования UUCode во время разработки (design time), подобно свойству Active у TTables и Tquery компонент.

Свойство Algorithm содержит информацию об алгоритме кодирования для метода UUCode. Реализованы следующие алгоритмы:

· filecopy – простое копирование файла InputFile в файл OutputFile

· uuencode – копирование файла с помощью алгоритма uuencode из файла InputFile и генерация файла OutputFile

· uudecode – копирование файла с помощью алгоритма uudecode из файла InputFile (и генерация файла OutputFile, если не используется Headers)

· xxencode – копирование файла с помощью алгоритма xxencode из файла InputFile и генерация файла OutputFile

· xxdecode – копирование файла с помощью алгоритма xxdecode из файла InputFile (и генерация файла OutputFile, если не используется Headers)

· Base64encode – копирование файла с помощью алгоритма Base64 encode InputFile и генерация файла OutputFile

· Base64decode – копирование файла с помощью алгоритма Base64 decode InputFile (и генерация файла OutputFile, если не используется Headers)

Свойство FileMode содержит шестнадцатеричное значение режима файла (обычно 0644 или 0755). Заметим, что режим задается с помощью десятичных цифр.

Свойство Headers может быть использовано для указания должны или нет использоваться заголовки begin-end в алгоритме кодирования или ожидаются в алгоритме декодирования. Значение по умолчанию True.

Свойство InputFile содержит имя входного файла для кодирования/декодирования.

Свойство OutputFile содержит имя выходного файла, в который будет записан результат кодирования. Заметим, что свойство OutputFile игнорируется при декодировании, если входной файл имеет заголовки, которые определяют имя файла для декодирования.

Свойство UnixCRLF используется для указания разделителей строк специфичных для Unix систем, только Line Feed (перевод строки) или DOS/Windows, где используется пара Carriage Return/Line Feed (возврат каретки/ перевод строки). По умолчанию CRLF, но как минимум вы имеете возможность кодировать и декодировать файлы для Unix систем.

Перейти на страницу:

Bob Swart читать все книги автора по порядку

Bob Swart - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Интернет решения от доктора Боба отзывы

Отзывы читателей о книге Интернет решения от доктора Боба, автор: Bob Swart. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*