ANSIファイルを開き、Delphiを使用してUnicodeファイルを保存します
-
03-07-2019 - |
質問
何らかの理由で、最近、クライアントシステムの多くの* .UDLファイルは、ANSIファイルとして保存されていたため、互換性がなくなりました。最終結果は、「ファイルは有効な複合ファイルではありません」というエラーダイアログです。
これらのファイルをプログラムで開いてUnicodeファイルとして保存する最も簡単な方法は何ですか?これを行うには、メモ帳で各ファイルを開き、同じファイルとして「unicode」を使用して保存します。ダイアログとして名前を付けて保存のエンコードセクションで選択されていますが、サポートコールを削減するためにプログラムでこれを行う必要があります。
この問題は非常に簡単に複製できます。ディレクトリに* .txtファイルを作成し、*。UDLに名前を変更してから、Microsoftエディターを使用して編集します。次に、メモ帳で開き、ANSIエンコードファイルとしてファイルとして保存します。 udlエディターからudlを開こうとすると、破損していることがわかります。 (メモ帳を使用して)Unicodeエンコードファイルとして保存すると、再び適切に開きます。
解決
これは、私の TGpTextFile ユニットを使用すると非常に簡単です。短いサンプルをまとめてここに投稿します。
新しいDelphi 2009でも非常にシンプルなはずです-使用している可能性がありますか?
編集:これは、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;
ライセンス:上記のコードはパブリックドメインに属します。好きなように使用してください。
他のヒント
OK、デルファイ2009を使用して、動作するように見える次のコードを思いつくことができましたが、この変換を行う適切な方法ですか?
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;