使用delphi的XML处理单元 XMLDoc XMLIntf
在获取XML文本内容的时候, 高版本的Delphi会丢失编码描述....在D7上却是正常的, 下面是测试源码:
procedure TForm1.Button1Click(Sender: TObject); var nXMLDoc: IXMLDocument; i: Integer; nMS: TMemoryStream; nSS: TStringStream; nStr: string; begin nXMLDoc := TXMLDocument.Create(nil); nXMLDoc.Active := True; nXMLDoc.Encoding := 'GB2312'; nXMLDoc.AddChild('test'); for i := 0 to 4 do nXMLDoc.DocumentElement.AddChild('测试').NodeValue := i; with Memo1 do begin Lines.Clear; Lines.Add('---- nXMLDoc.XML.Text ----'); Lines.Add(''); Lines.Add(nXMLDoc.XML.Text); end; nMS := TMemoryStream.Create; nXMLDoc.SaveToStream(nms); nms.Position := 0; with Memo2 do begin Lines.Clear; Lines.LoadFromStream(nms); Lines.Insert(0, ''); Lines.Insert(0, '---- nXMLDoc.SaveToStream ----'); end; nMS.Free; nXMLDoc.SaveToXML(nStr); with Memo3 do begin Lines.Clear; Lines.Add('---- nXMLDoc.SaveToXML ----'); Lines.Add(''); Lines.Add(nStr); end; end;
下面是同样的代码分别在Delphi7 和Delphi2010的执行效果
对比可以发现, XML.Text和SaveToXML这2个方法, 在2010上, 输入以后 encoding="GB2312" 的编码信息会丢失
使用XE5的版本测试也一样会丢失, 只有在D7上是正常的
Delphi7结果
Delph2010结果
http://www.cnblogs.com/hs-kill/p/3829183.html