Anstelle eines MemoryStreams würde ich einen
TStringStream verwenden.
Der Zugriff auf die Daten wird damit einfach bequemer.
Delphi-Quellcode:
strm:=TStringStream.Create;
MyComp.SaveToStream(strm);
strm.Seek(soFromBeginning , 2); // BOM überspringen
utf8codierterstring := strm.ReadString(strm.Size);
// hier brauchst du nur noch eine Funktion, die UTF8 in
// einen AnsiString oder WideString wandelt, jenachdem
// was gewünscht wird.