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 回答