使用delphi从.log文件读取时,将"ÿþI"作为输出数据

and*_*ies 6 delphi delphi-7 delphi-2007

我试图从.log文件中读取数据并处理其内容.日志文件由另一个应用程序创建.当我在Delphi中使用readln命令并在备忘录中显示文件的内容时,我只从一个包含超过6000行数据的文件中获取一行数据(ÿþI).

    procedure TForm1.Button1Click(Sender: TObject);
    Var
        F : TextFile;
        s : string;
    begin
        AssignFile(F, 'data.log');
        Reset(F);

        while not Eof(F) do
        begin
            Readln(F, s);
            Memo1.Lines.Add(s);
        end;
    end;
Run Code Online (Sandbox Code Playgroud)

有谁知道问题可能是什么?

Rem*_*eau 4

正如 Michael 所说,您正在处理 UTF-16 编码的文件,因此您必须手动加载和解码它。网上有各种WideString基于类似的类,或者Borland在单元中有自己的实现,尝试使用其中之一而不是Pascal文件I/O,例如:TStringListWideStrings

procedure TForm1.Button1Click(Sender: TObject);
var
  SL : TWideStringList;
  I: Integer;
  s : string;
begin
  SL := TWideStringList.Create;
  try
    SL.LoadFromFile('data.log');
    Memo1.Lines.BeginUpdate;
    try
      for I := 0 to SL.Count-1 do
        Memo1.Lines.Add(SL[I]);
    finally
      Memo1.Lines.EndUpdate;
    end;
  finally
    SL.Free;
  end;
end; 
Run Code Online (Sandbox Code Playgroud)

或者:

uses
  .., WideStrings;

procedure TForm1.Button1Click(Sender: TObject);
var
  SL : TWideStringList;
begin
  SL := TWideStringList.Create;
  try
    SL.LoadFromFile('data.log');
    Memo1.Lines.Assign(SL);
  finally
    SL.Free;
  end;
end; 
Run Code Online (Sandbox Code Playgroud)

或者,安装 TNTWare 或 TMS 的副本,它们都具有支持 Unicode 的组件。然后您应该能够将LoadFromFile().log 文件直接放入您选择使用的 Unicode Memo 组件中。