[DUG] Help - Mime64 insanity !

Robert Martin rob at chreos.co.nz
Tue Aug 9 17:01:27 NZST 2016


Hi guys


I have been struggling to get some basic Mime encoding working, I have 
the following code which I use to Mime64 Encode a picture contained in a 
TImage component....

             Base64 := TMime64.create;
             try
                     MemoryStream := TMemoryStream.Create;
                     MemoryStream.Position := 0;
Image.Picture.Graphic.SaveToStream(MemoryStream);

                     ReportImage.ImageMime   := 
Base64.Encode_New(MemoryStream);
             .....

Function shown below...



function TMime64.Encode_New(aSourceStream: TMemoryStream): String;
var
     IdEncoderMIME       : TIdEncoderMIME;
     Sl                  : TStringList;
begin
     Result := '';
     try

         IdEncoderMIME := TIdEncoderMIME.Create(nil);
         sl := TStringList.Create;
         try
             aSourceStream.Position := 0;
             Result := IdEncoderMIME.EncodeStream(aSourceStream);

             sl.Text := Result;
             sl.SaveToFile('d:\d\a.txt', TEncoding.UTF8);
         finally
             IdEncoderMIME.Free;
             sl.Free;
         end;
     except
         on E : Exception do begin
             raise EMimeError.Create(E.Message);
         end;
     end;
end;

The issue is that when I try to save the results in a UTF8 formatted 
file (the destination is to be a UTF-8 formatted XML file), there are 
'bad' characters in the file which are invisible in Notepad++ but are 
present.

If I save without specifying the file encoding ( 
sl.SaveToFile('d:\d\a.txt') instead of sl.SaveToFile('d:\d\a.txt', 
TEncoding.UTF8)   ) I have what appears to be a clean ASCII file. My 
understanding is that ASCII characters have the same byte value (0-127) 
in an ASCII formatted file or a UTF-8 formatted file so I don't 
understand why the values would change.

Any suggestions.


p.s. I have to be able to save the file as UTF-8 because that is what 
the destination XML is encoded in.  Currently it is 'corrupt' because of 
the 'bad' characters.

p.p.s TIdEncoderMIME.EncodeStream returns a String.  I am using Delphi Xe2.

p.p.p.s I know it is something stupid I am doing !




Thanks
Rob




More information about the Delphi mailing list