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?