6

何らかの理由で、最近、多くのクライアント システムの *.UDL ファイルが ANSI ファイルとして保存されたため、互換性がなくなりました。これは、期待される UNICODE ファイル形式との互換性がなくなりました。最終結果は、「ファイルは有効な複合ファイルではありません」というエラー ダイアログです。

これらのファイルをプログラムで開き、Unicode ファイルとして保存する最も簡単な方法は何ですか? メモ帳でそれぞれを開いて同じファイルとして保存することでこれを実行できることはわかっていますが、[名前を付けて保存] ダイアログのエンコードセクションで「Unicode」を選択しますが、サポートを削減するためにプログラムでこれを行う必要があります呼び出します。

この問題は非常に簡単に再現できます。ディレクトリに *.txt ファイルを作成し、名前を *.UDL に変更してから、Microsoft エディタを使用して編集します。次に、メモ帳で開き、ファイルとして ANSI エンコード ファイルとして保存します。udl エディタから udl を開こうとすると、壊れていることがわかります。次に、(メモ帳を使用して) Unicode でエンコードされたファイルとして保存すると、再び適切に開きます。

4

2 に答える 2

9

わかりました、delphi 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;
于 2008-10-01T16:18:33.923 に答える
7

これは、私の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;

ライセンス: 上記のコード フラグメントはパブリック ドメインに属します。好きなように使ってください。

于 2008-10-01T16:15:52.260 に答える