RAD Studio and Internet Message Format

by Mar 17, 2018

Introduction
The RFC-2822 standard specifies a syntax for text messages that are sent between computer users, within the framework of "electronic mail" messages.  The RFC-2822 specifies lines should be no longer than 78 characters, and the MIME spec RFC-2045, says:
The encoded output stream must be represented in lines of no more than 76 characters each.  All line breaks or other characters not found in Table 1- The Base64 Alphabet must be ignored by decoding software.
 
RAD Studio and TNetEncoding.Base64.
RAD Studio (Delphi and C++ Builder) follows the RFC-2822 and RFC-2045 specs!
For example, given this Delphi code:
 procedure TForm55.Button1Click(Sender: TObject);
var
  S: string;
begin
  S := 'jfdlksjflkasjdlfow7r89fpsduf87s8fy4387rhfofldsajfhasddlsihjsldhjlsdhlfhjsdafhjsadh';
  Memo1.Text :=  TNetEncoding.Base64.EncodeBytesToString(TEncoding.GetEncoding('ISO-8859-1').GetBytes(S));
end;

TEncodingBase64

You will notice that this produces a #13#10 in the middle.

Delphi and/or C++ Builder is automatically wrapping at 76 characters per line (TBase64Encoding.kCharsPerLine.)  You can override this in one of the constructors and pass 0: TBase64Encoding.Create(0) where 0 means don't wrap lines.

Delphi and C++ Builder does this because it's a net encoding and base64 is used for representing binary in, eg, email; Recalling that the RFC-2822 specifies lines should be no longer than 78 characters and the MIME spec RFC-2045, and it says: “The encoded output stream must be represented in lines of no more than 76 characters each.  All line breaks or other characters not found in Table 1- The Base64 Alphabet must be ignored by decoding software.” 
We see that Delphi and C++ Builder matches the spec accurately!
This is completely valid.  RAD Studio (Delphi and/or C++ Builder) creates 100% valid MIME base64 encoded text! 
Compared to this corresponding .NET code, which (unlike Delphi or C++ Builder) does not put anything in the middle:
Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(Key1+ ":" + Secret1))
 
[DownloadButton Product=’RAD’ Caption=’Start Your RAD Studio FREE Trial Today’]