AssignFile und Co. arbeitet immer nur mit
ANSI - UnicodeStrings werden entsprechend umkodiert.
Du könntest als erstes (beim Erstellen der Datei, als AnsiString) den UTF-8-BOM einfügen
und dann immer (wie schon von Stevie vorgeschlagen) über UTF8Encode abspeichern.
Oder man kopiert den UnicodeString, zusammen mit einem sLinebreak, Bytegenau in einen RawByteString und schiebt diesen via AssignFile+Write (nicht WriteLn) in die Datei.
Oder man öffnet die Datei binär und nimmt BlockWrite,
bzw. über einen TFileStream und dort ebenfalls binär, wie im vorherigen Post zu sehn.
Oder TFileStream erstellen, die Position auf das Dateiende setzen und dann über TStringStream dort den String anhängen.