CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  HTML/XML

[求助]在VC中使用loadXML从内存中加载XML数据后乱码的问题

楼主blues_city()2006-03-03 18:01:02 在 VC/MFC / HTML/XML 提问

我在VC中把一个XML文件的内容读入内存,之后想使用LoadXML进行载,因为LOADXML只接受UTF-8编码的数据,于是我用MultiByteToWideChar   进行了转换,但是最后在取各个项的数据时,得到的全是乱码,我也试过用WideCharToMultiByte   进行转回,可还是不行。  
  请问,倒底是什么地方的问题呢?  
  以下是代码片断:  
   
  用到的数据的定义:  
  IXMLDOMDocumentPtr   pDoc;  
  IXMLDOMNodePtr   pNode;  
   
  bool   Cxml::LoadFromBuffer(char*   buffer)  
  {  
  HRESULT   hr   =   pDoc.CreateInstance(__uuidof(MSXML::DOMDocument));         //创建文档对象  
  if   (hr   ==   S_OK)  
  {  
  VARIANT_BOOL   bFlag;  
  //对STR   进行UTF-8转码  
    int   len   =   static_cast<int>(strlen(buffer));  
    WCHAR*   wbuffer   =   new   WCHAR[len+2];  
    memset(wbuffer,0,sizeof(WCHAR)*len+2);  
    int   rl   =   MultiByteToWideChar(CP_UTF8   ,   0,   buffer,   len,   wbuffer,   len+2);  
  DWORD   dw   =   GetLastError();  
    BSTR   sb   =     wbuffer;  
  hr   =   pDoc->loadXML(sb,   &bFlag);                               //load   xml文件  
  delete[]   wbuffer;  
  if   (S_OK   ==   hr)  
  {  
  return   true;  
   
  }  
   
  }  
   
  return   false;  
  }  
   
  HRESULT   Cxml::GetCurrentNodeText(CString   NodeName,CString&   outText)  
  {  
  if   (pNode   ==   NULL)  
  return   E_FAIL;  
  IXMLDOMNodePtr   pcNode   =   NULL;  
  CComBSTR   name;  
  CComBSTR   text;  
  name   =   NodeName;  
  HRESULT   hr   =   pNode->selectSingleNode(name,&pcNode);  
  if   (S_OK   ==   hr)  
  {  
  hr   =   pcNode->get_text(&text);  
  if   (S_OK   ==   hr   )  
  {  
  //SAFE_RELEASE(pcNode);  
  pcNode.Release();  
  //转换成可以用的数据。  
  char   buffer[4096];  
  int   rl   =   WideCharToMultiByte(CP_UTF8,   0,text,   -1,   buffer,   4096,   NULL,   NULL);  
  DWORD   dw   =   GetLastError();  
  outText   =   buffer;  
   
  return   hr;  
  }  
  }  
  pcNode.Release();  
   
  return   E_FAIL;  
  } 问题点数:20、回复次数:2Top

1 楼coolzdp(unreal张师傅)回复于 2006-03-04 10:47:26 得分 20

lz的编码转换正确吗?  
   
  UTF-8与GB2312之间的互换  
  http://www.vckbase.com/document/viewdoc/?id=1444  
   
  要是从文件载入直接load()好了Top

2 楼blues_city()回复于 2006-03-05 15:23:04 得分 0

十分感谢,问题已经解决……  
  因为XML的数据是在程序运行时在内存中组装出来的,所以只能用LoadXML加载……,也正因为是组装出来的数据,忘了在最后加上0的结束符……。  
  所以一开始失败后查MSDN说只支持UTF-8的编码就进行了转码……,没想到转出来的可以装了却奇怪的出现了乱码。(非常奇怪的问题……)  
  其实直接使用CString的AllocSysString就可以了,不需要使用特别的转换的。Top

相关问题

  • VC资源加载问题
  • 如何只加载一次xml文档
  • vc中如何控制加载文档?
  • xml在vc下的应用:loadXML().求救!
  • 求教:如何在在页面上加载xml后,将xsl样式也加载进来?
  • 请问为什么我的XML无法加载XSL?
  • 如何封装XML数据的加载过程?
  • 如何从XML字符串加载数据集???
  • 使用javascript 加载其他站点的xml数据
  • 如何连接已加载到浏览器中的xml?

关键词

  • 乱码
  • 数据
  • 内存
  • hr
  • 编码
  • 转换
  • 文件
  • release
  • xml
  • null

得分解答快速导航

  • 帖主:blues_city
  • coolzdp

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo