• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

一个关于DelphiXML处理单元的BUG

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用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结果


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi的对象机制浅探(转)发布时间:2022-07-18
下一篇:
Delphi数据类型转换发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap