[DUG] Help - Mime64 insanity !

Todd Martin todd.martin.nz at gmail.com
Tue Aug 9 18:35:27 NZST 2016


Why are you using a TStringlist at all?

If you're encoding to Base64, encoding to UTF8 is meaningless.

Todd

On 9 Aug 2016 5:54 p.m., "Peter Ingham" <ping_delphilist at 3days.co.nz> wrote:

> If you look at the output file in a hex editor, what do you see?
>
> If the first 3 bytes are 0xEF,0xBB,0xBF, then that is a "Byte Order Mark".
>
> UTF-8 is a method for encoding UNICODE characters using 8-Bit Bytes.
>
> A file containing 7-Bit ASCII (high-order bit of every character zero),
> when converted to UTF-8 is likely to look very similar.  For anything
> else, all bets are off.   Treating them as universally equivalent is asking
> for trouble.
>
> Many text editors will look for Byte Order marks (of varying types) and
> use them without displaying them (e.g: see https://en.wikipedia.org/wiki/
> Byte_order_mark#UTF-8).
>
>
> Regards
> On 9/08/2016 5:01 p.m., Robert Martin wrote:
>
> 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
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with Subject: unsubscribe
>
>
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
> Subject: unsubscribe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20160809/22ec14c8/attachment-0001.html 


More information about the Delphi mailing list