Pascal Lazarus在TMemo中打开XML文件

Pascal Lazarus在TMemo中打开XML文件,pascal,lazarus,freepascal,Pascal,Lazarus,Freepascal,我试图以文本形式在TMemo中打开一个XML文件。每次我这样做,它就会打开: 我知道这不是XML中的内容,如果我在记事本中打开该文件,它会很好地打开并显示XML数据,纯文本 这是我的代码: procedure TForm1.Button7Click(Sender: TObject); var ss: string; sl: TStringList; begin ss := ''; runcommand('msinfo32 /nfo pcinfo.xml', ss); sl:=

我试图以文本形式在TMemo中打开一个XML文件。每次我这样做,它就会打开:

我知道这不是XML中的内容,如果我在记事本中打开该文件,它会很好地打开并显示XML数据,纯文本

这是我的代码:

procedure TForm1.Button7Click(Sender: TObject);
var
  ss: string;
  sl: TStringList;
begin
  ss := '';
  runcommand('msinfo32 /nfo pcinfo.xml', ss);
  sl:=TStringList.Create;
  sl.LoadFromFile('pcinfo.xml');
  Memo2.Text := sl.Text;
  sl.Free;
end;

文件以Unicode格式保存,打开记事本并另存为文件显示了编码。因此,将文件打开到流中,然后转换为UTF8就像一个符咒

stream := TMemoryStream.Create;
  try
    stream.LoadFromFile('pcinfo.xml');
    SetLength(s, stream.Size);
    stream.ReadBuffer(s[1], stream.Size);
    memo2.Text := ConvertEncoding(s, GuessEncoding(s), EncodingUTF8);
  finally
    stream.Free;
  end;

这可能是开始时的一个标记。您可以指定文件的编码吗?如何指定?记事本>另存为>编码>UTF-8。我猜没有名字的@a_horse_只对了一半:当然,但不是UTF-8。更有可能是UTF-16中的一个。如果XML只包含ASCII,那么也可以将其编码为ANSI。