Abra um arquivo ANSI e salvar um arquivo Unicode utilizando Delphi
-
03-07-2019 - |
Pergunta
Por alguma razão, ultimamente, o * .UDL arquivos em muitos dos meus sistemas cliente não compatíveis são como eles já foram salvos como arquivos ANSI, que já não é compatível com o formato de arquivo Unicode esperado. O resultado final é um diálogo de erro que afirma que "o arquivo não é um arquivo composto válido".
O que é a maneira mais fácil para abrir programaticamente esses arquivos e salvar como um arquivo unicode? Eu sei que posso fazer isso abrindo cada um no bloco de notas e, em seguida, salvar como o mesmo arquivo, mas com o "unicode" selecionada na seção de codificação de diálogo Salvar como, mas eu preciso fazer isso no programa para reduzir o apoio chamadas.
Este problema é muito fácil de duplicar, basta criar um arquivo .txt * em um diretório, renomeie para * .UDL, em seguida, editá-lo usando o editor de microsoft. Em seguida, abra-o no bloco de notas e salvar como o arquivo como um ANSI codificado arquivo. Tente abrir a UDL a partir do editor UDL e ele vai dizer-lhe o seu corrupto. depois salvá-lo (usando o bloco de notas) como um Unicode codificado arquivo e ele vai abrir novamente corretamente.
Solução
Isto é muito simples de fazer com minha href="http://gp.17slon.com/gp/gptextfile.htm" rel="noreferrer"> TGpTextFile unidade . Vou montar uma pequena amostra e postá-lo aqui.
Ele também deve ser muito simples com o novo Delphi 2009 -? Você talvez usá-lo
EDIT:. Esta sua como você pode fazê-lo usando meu material em pré-2009 Delphis
var
strAnsi : TGpTextFile;
strUnicode: TGpTextFile;
begin
strAnsi := TGpTextFile.Create('c:\0\test.udl');
try
strAnsi.Reset; // you can also specify non-default 8-bit codepage here
strUnicode := TGpTextFile.Create('c:\0\test-out.udl');
try
strUnicode.Rewrite([cfUnicode]);
while not strAnsi.Eof do
strUnicode.Writeln(strAnsi.Readln);
finally FreeAndNil(strUnicode); end;
finally FreeAndNil(strAnsi); end;
end;
Licença: O fragmento de código acima pertence ao domínio público. Usá-lo de qualquer maneira que você gosta.
Outras dicas
Ok, usando o Delphi 2009, eu era capaz de chegar com o seguinte código que aparece ao trabalho, mas é a maneira correta de fazer esta conversão?
var
sl : TStrings;
FileName : string;
begin
FileName := fServerDir+'configuration\hdconfig4.udl';
sl := TStringList.Create;
try
sl.LoadFromFile(FileName, TEncoding.Default);
sl.SaveToFile(FileName, TEncoding.Unicode);
finally
sl.Free;
end;
end;