当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《使用Delphi打开ANSI文件并保存Unicode文件》经验,为你挑选了2个好方法。

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

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

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



1> skamradt..:

好的,使用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;



2> gabr..:

这对我的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;

许可证:上面的代码片段属于公共域.无论如何,请使用它.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有