質問

何らかの理由で、最近、クライアントシステムの多くの* .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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top