我是把百度新闻RSS从GB2312转换为UTF-8,重写了TNativeXml的LoadFromStream方法。
TMyNativeXml = class(TNativeXml)
  public
    procedure LoadFromStream(AStream: TStream;AEncoding: TEncoding); reintroduce;
  end;procedure TMyNativeXml.LoadFromStream(AStream: TStream;AEncoding: TEncoding);
var
  LBuffer,LByteOrderMark: TBytes;
  LOffset: Integer;
  LEncoding,DestEncoding: TEncoding;
  LMemStm: TMemoryStream;
begin
  LEncoding:=nil;
  if not Assigned(AEncoding) then
  begin
    inherited LoadFromStream(AStream);
    Exit;
  end
  else
  begin
    DestEncoding:=AEncoding;
    SetLength(LBuffer,AStream.Size);
    AStream.ReadBuffer(LBuffer[0],Length(LBuffer));
    LOffset:=TEncoding.GetBufferEncoding(LBuffer,LEncoding);
    LBuffer:=TEncoding.Convert(LEncoding,DestEncoding,LBuffer,LOffset,Length(LBuffer)-LOffset);
    LMemStm:=TMemoryStream.Create;
    try
      LByteOrderMark:=DestEncoding.GetPreamble; {获取编码识别符(BOM)}
      LMemStm.Write(LByteOrderMark[0],Length(LByteOrderMark));
      LMemStm.Write(LBuffer[0],Length(LBuffer));
      LMemStm.Position:=0;
      inherited LoadFromStream(LMemStm);
    finally
      FreeAndNil(LMemStm);
    end;
    SetLength(LBuffer,0);
    SetLength(LByteOrderMark,0);
  end;
end;使用是:
var XmlParser:TMyNativeXml;
XmlParser:=TMyNativeXml.Create(Self);
XmlParser.LoadFromStream(TheStream,TEncoding.UTF8);