出于某种原因,最近我的许多客户端系统上的* .UDL文件不再兼容,因为它们曾被保存为ANSI文件,后者不再与预期的UNICODE文件格式兼容。最终结果是一个错误对话框,指出“该文件不是有效的复合文件”。
以编程方式打开这些文件并保存为unicode文件的最简单方法是什么?我知道我可以通过打开记事本中的每一个然后保存为相同的文件,但在保存为对话框的编码部分中选择“unicode”来执行此操作,但我需要在程序中执行此操作以减少支持调用
这个问题很容易复制,只需在目录中创建一个* .txt文件,将其重命名为* .UDL,然后使用microsoft编辑器进行编辑。然后在记事本中打开它并将其另存为ANSI编码文件。尝试从udl编辑器打开udl,它会告诉你它的损坏。然后将其保存(使用记事本)作为Unicode编码文件,它将再次正常打开。
答案 0 :(得分: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;
答案 1 :(得分: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;
许可证:上面的代码片段属于公共域。无论如何,请使用它。