<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>If you look at the output file in a hex editor, what do you see?</p>
<p>If the first 3 bytes are <code>0xEF,0xBB,0xBF, then that is a
"Byte Order Mark".</code></p>
<p><code>UTF-8 is a method for encoding UNICODE characters using
8-Bit Bytes.</code></p>
<p><code>A file containing 7-Bit ASCII (high-order bit of every
character zero), when converted to UTF-8 is likely to look</code><code></code>
very similar. For anything else, all bets are off. Treating
them as universally equivalent is asking for trouble.<br>
</p>
<p>Many text editors will look for Byte Order marks (of varying
types) and use them without displaying them (e.g: see
<a class="moz-txt-link-freetext" href="https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8">https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8</a>).</p>
<p><br>
</p>
<p>Regards<br>
</p>
<div class="moz-cite-prefix">On 9/08/2016 5:01 p.m., Robert Martin
wrote:<br>
</div>
<blockquote
cite="mid:c30d83ee-c430-3564-7c22-66650a79c38c@chreos.co.nz"
type="cite">
<pre wrap="">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: <a class="moz-txt-link-abbreviated" href="mailto:delphi@listserver.123.net.nz">delphi@listserver.123.net.nz</a>
Admin: <a class="moz-txt-link-freetext" href="http://delphi.org.nz/mailman/listinfo/delphi">http://delphi.org.nz/mailman/listinfo/delphi</a>
Unsubscribe: send an email to <a class="moz-txt-link-abbreviated" href="mailto:delphi-request@listserver.123.net.nz">delphi-request@listserver.123.net.nz</a> with Subject: unsubscribe
</pre>
</blockquote>
<br>
</body>
</html>