Excepción con caracteres alemanes Umlaut en TMemIniFile.Create

Tengo un archivo .URL que contiene el siguiente texto que contiene un carácter Umlaut alemán:

[InternetShortcut]
URL =http://edn.embarcadero.com/article/44358
[MyApp]
Notas = Prueba especial geändert
Icono = predeterminado
Título = Lista de corrección de errores para RAD Studio XE8

Intento cargar el texto conTMemIniFile:

uses System.IniFiles;
//
procedure TForm1.Button1Click(Sender: TObject);
var
  BookmarkIni: TMemIniFile;
begin
  // The error occurs here:      
  BookmarkIni := TMemIniFile.Create('F:\Bug fix list for RAD Studio XE8.url',
                                    TEncoding.UTF8);
  try
    // Some code here
  finally
    BookmarkIni.Free;
  end;
end;

Este es el texto del mensaje de error del depurador:

El proyecto MyApp.exe generó la clase de excepción EEncodingError con el mensaje 'No existe asignación para el carácter Unicode en la página de códigos de múltiples bytes de destino'.

Cuando elimino la palabra con el carácter alemán Umlaut "geändert" del archivo .URL, NO hay ningún error.

Pero es por eso que usoTMemIniFile, porqueTIniFile no funciona aquí cuando el texto en el archivo .URL contiene caracteres Unicode. (También podría haber otros caracteres Unicode en el archivo .URL).

Entonces, ¿por qué tengo una excepción aquí enTMemIniFile.Create?

EDITAR: Encontró al culpable: el archivo .URL está enANSI formato. El error no ocurre cuando el archivo .URL está enUTF-8 formato. Pero, ¿qué puedo hacer cuando el archivo está enANSI ¿formato?

EDIT2: He creado una solución alternativa que funciona AMBOS conANSI yUTF-8 archivos:

procedure TForm1.Button1Click(Sender: TObject);
var
  BookmarkIni: TMemIniFile;
  BookmarkIni_: TIniFile;
  ThisFileIsAnsi: Boolean;
begin
  try
    ThisFileIsAnsi := False;
    BookmarkIni := TMemIniFile.Create('F:\Bug fix list for RAD Studio XE8.url',
                                    TEncoding.UTF8);
  except
    BookmarkIni_ := TIniFile.Create('F:\Bug fix list for RAD Studio XE8.url');
    ThisFileIsAnsi := True;
  end;
  try
    // Some code here
  finally
    if ThisFileIsAnsi then
      BookmarkIni_.Free
    else
      BookmarkIni.Free;
  end;
end;

¿Qué piensas?

Respuestas a la pregunta(3)

Su respuesta a la pregunta