function LoadUTF8FromFile(Filename: string): WideString;
var
Stream: TMemoryStream;
Size: Integer;
Str: PWChar;
begin
Result:= '';
Stream:= TMemoryStream.Create;
try
Stream.LoadFromFile(Filename);
Size:= MultiByteToWideChar(CP_UTF8,0,Stream.Memory,
Stream.Size,nil,0);
if Size > 0 then
begin
GetMem(Str,(Size+1)*Sizeof(WideChar));
FillChar(Str^,(Size+1)*Sizeof(WideChar),#0);
try
if MultiByteToWideChar(CP_UTF8,0,Stream.Memory,
Stream.Size,Str,Size) > 0 then
begin
Result:= WideString(Str);
end;
finally
FreeMem(Str);
end;
end;
finally
Stream.Free;
end;
end;