使用Delphi打开ANSI文件并保存Unicode文件

时间:2020-03-06 14:59:01  来源:igfitidea点击:

由于某种原因,最近,我的许多客户端系统上的* .UDL文件不再兼容,因为它们曾经被另存为ANSI文件,而该文件不再与预期的UNICODE文件格式兼容。最终结果是一个错误对话框,提示"文件不是有效的复合文件"。

以编程方式打开这些文件并另存为unicode文件的最简单方法是什么?我知道我可以通过在记事本中打开每个文件夹,然后将其保存为相同的文件,但是在"另存为"对话框的编码部分中选择了" unicode"来执行此操作,但是我需要在程序中执行此操作以减少支持电话。

这个问题很容易复制,只需在目录中创建一个* .txt文件,将其重命名为* .UDL,然后使用Microsoft编辑器对其进行编辑。然后在记事本中打开它,并将其另存为ANSI编码文件。尝试从udl编辑器中打开udl,它会告诉我们它已损坏。然后将其保存(使用记事本)为Unicode编码文件,它将再次正常打开。

解决方案

使用我的TGpTextFile单元非常简单。我将整理一个简短的示例并将其发布在这里。

新的Delphi 2009也应该非常简单,我们可能正在使用它吗?

编辑:这是他如何使用2009年前的Delphis中的资料来完成这项工作。

var
  strAnsi   : TGpTextFile;
  strUnicode: TGpTextFile;
begin
  strAnsi := TGpTextFile.Create('c:
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;
\test.udl'); try strAnsi.Reset; // you can also specify non-default 8-bit codepage here strUnicode := TGpTextFile.Create('c:##代码##\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;

许可证:上面的代码片段属于公共领域。随便使用它。

好的,使用delphi 2009,我能够提出以下似乎有效的代码,但这是进行此转换的正确方法吗?

##代码##