Öffnen Sie eine ANSI-Datei und speichern eine Unicode-Datei mit Delphi
-
03-07-2019 - |
Frage
Aus irgendeinem Grund in letzter Zeit die * .UDL Dateien auf viele meiner Client-Systeme sind nicht mehr kompatibel, wie sie einmal als ANSI-Dateien gespeichert wurden, die nicht mehr mit dem erwarteten UNICODE-Dateiformat kompatibel ist. Das Endergebnis ist ein Fehlerdialog, die besagt, „Die Datei ist keine gültige Verbindung file“.
Was ist der einfachste Weg, um programmatisch diese Dateien zu öffnen und als Unicode-Datei speichern? Ich weiß, ich kann dies tun, indem jeden in Notepad öffnen und dann als die gleiche Datei zu speichern, sondern mit dem „Unicode“ ausgewählt im Codierabschnitt der als Dialog speichern, aber ich brauche diese in dem Programm zu tun, auf der Unterstützung abgeholzt nennt.
Dieses Problem ist sehr einfach zu duplizieren, erstellen Sie einfach eine * .txt-Datei in einem Verzeichnis, benennen Sie sie in * .UDL, dann bearbeiten Sie die Microsoft-Editor. öffnen Sie sie dann in Notepad und speichern Sie wie die Datei als ANSI-codierte Datei. Versuchen Sie, die UDL aus dem UDL-Editor zu öffnen und es wird Ihnen seine korrupte erzählen. speichern Sie es dann (unter Verwendung von Notepad) als Unicode-codierte Datei und es öffnet sich nun wieder.
Lösung
Dies ist sehr einfach mit meinem TGpTextFile Einheit zu tun. Ich werde eine kurze Probe zusammengestellt und per Post hier.
Es sollte auch mit dem neuen Delphi 2009 sehr einfach sein - sind Sie es vielleicht mit
?EDIT:. Dies sein, wie Sie es tun können, meine Sachen in dem vor 2009 Delphis mit
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;
Lizenz: Das Codefragment gehört oben public domain. Verwenden Sie es, irgendwie, das Sie mögen.
Andere Tipps
Ok, mit delphi 2009 konnte ich mit dem folgenden Code kommen, die zu funktionieren scheinen, aber es ist der richtige Weg, um diese Umwandlung zu tun?
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;