Argh. Unicode is catching up even with me

For a file import program I currently accept ANSI files. However, I should also support UTF16 with BOM and for completeness UTF8 with BOM.
I'm going to cheat and convert everything to ANSI right now... and look at implementing the required Unicode support for intermediate storage in TDBF and export to CSV,Excel,Access,Firebird,SQLite,Tex,RTF... later.
For UTF8 with BOM, with FPC trunk, I've got this conversion code:
const
UTF8BOM: string = #$EF#$BB#$BF;
...
var
Count:integer;
FileBegin: string[3];
InStream: TFileStream;
OutStream: TMemoryStream;
TempString: RawByteString;
UTF8Content: UTF8String;
...
// after detecting the UTF8 BOM in InStream
SetLength(UTF8Content,InStream.Size-3); //Input file minus BOM
InStream.Seek(3, soBeginning);
InStream.Read(UTF8Content[1], Length(UTF8Content));
TempString:=UTF8ToAnsi(UTF8Content); //or use lazutf8.UTF8ToSys
OutStream.WriteAnsiString(TempString);
Is this about the right code? Am I on the right track to implement similar code for UTF16BE with BOM and UTF16LE with BOM or are there easier ways?
Thanks a lot.