Ganz so automatisch ist es nicht, LoadFromFile erwartet immer eine UTF-16 Datei. Für UTF-8 (oder andere Codierungen) gibt es
TntMemo1.Lines.AnsiStrings.LoadFromFileEx('datei', CP_UTF8);
Dann wird UTF8Decode schon mal intern aufgerufen, auch wenn es nicht die beste Funktion von Delphi ist.
Die Bommeln sind nicht unbedingt verlässlich, zumal sie für UTF-8 eigentlich überflüssig sind. Bei
XML kann man aber meist mit UTF-8 rechnen. Wenn nur die Auswahl UTF-8 oder UTF-16 besteht, sollte es reichen, die Datei mal Byteweise zu lesen, trifft man auf Nullbytes, ist es UTF-16. Ansonsten ist aber UTF-8 eine der wenigen Codierungen, die sich einigermaßen eindeutig identifizieren lassen.