Нашёл решение проблемы.
Текст файла уже в utf8 и преобразование к utf16 не требуется.
Код:
function ReadFromFile(FileName:String):UTF8String;
const
Error = 'File to large!';
var
Size: Int64Rec;
hFile: Integer;
begin
hFile := FileOpen(FileName, fmOpenRead or fmShareDenyWrite);
try
Size.Lo := GetFilesize(hFile, @Size.Hi);
if Int64(Size) > 1048576 then raise Exception.Create(Error); // Size > 1MB
SetLength(Result, Size.Lo);
FileRead(hFile, (PUTF8String(Result))^, Size.Lo);
finally
FileClose(hFile);
end;
end;