Exceção com caracteres do trema alemão em TMemIniFile.Create

Eu tenho um arquivo .URL que contém o seguinte texto que contém um caractere de trema alemão:

[InternetShortcut]
URL =http://edn.embarcadero.com/article/44358
[MyApp]
Notas = Teste Especial
Ícone = padrão
Title = Lista de correções de erros do RAD Studio XE8

Eu tento carregar o texto comTMemIniFile:

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 é o texto da mensagem de erro do depurador:

O projeto MyApp.exe gerou a classe de exceção EEncodingError com a mensagem 'Não existe mapeamento para o caractere Unicode na página de código de vários bytes de destino'.

Quando removo a palavra com o caractere alemão Umlaut "geändert" do arquivo .URL, não há erro.

Mas é por isso que eu usoTMemIniFile, PorqueTIniFile não funciona aqui quando o texto no arquivo .URL contém caracteres Unicode. (Também pode haver outros caracteres Unicode no arquivo .URL).

Então, por que eu recebo uma exceção aqui emTMemIniFile.Create?

EDITAR: Encontrou o culpado: o arquivo .URL está emANSI formato. O erro não ocorre quando o arquivo .URL está emUTF-8 formato. Mas o que posso fazer quando o arquivo estiver emANSI formato?

EDIT2: Eu criei uma solução alternativa que funciona AMBOS comANSI eUTF-8 arquivos:

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;

O que você acha?

questionAnswers(3)

yourAnswerToTheQuestion