需要编程读取XML文件,但是XML里面有中文。
XML文件中没有标明encoding类型,但是我只有读已有XML的选择,无法强制要求做成者加上encoding(大部分都是历史遗留文档)。从VC编码的角度的话,有办法解决这个问题吗?
我试验过,把XML转换成UNICODE可以正常读取,但是我不可能让用我软件的人先把手头的XML都转成UNICODE再使用。

解决方案 »

  1.   

    读出来再进行转换MultiByteToWideChar
      

  2.   

    感谢答复。实际上,我以前从来没研究过这东西,都是在网上找到程序来改。昨晚上我参考的是
    http://blog.csdn.net/firebird321/archive/2008/03/17/2190992.aspx
    的做法。在
    childNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode("//City"));
    这一步的时候,如果包含中文汉字,childNode 的返回值就一直是0。如果要进行UNICODE转换的话,应该在哪里加?
      

  3.   

    对xml文件数据类型进行判断,统一转换为unicode处理
      

  4.   

    标签名称不能使用中文。
    如果XML是一个文件,你可以把文件路径直接交给document::load来加载,它会判断编码。
      

  5.   

    我可能没说明白。假设有如下XML文件:
    <aaa>
    <bbb ccc="汉字">ddd</bbb>
    </aaa>
    那么childNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode("//bbb")); 
    之后,childNode = 0 。4楼说的Load文件路径,是说
    MSXML2::IXMLDOMDocumentPtr pDoc; 
    pDoc->load("d:\XmlPath");
    这类的写法吗?
      

  6.   

    换用CMarkUp了。问题已经解决。使用的是MarkUp Ver11.0由于CUp默认的Encoding是UTF-8的。而由于历史原因XML文件而没有注明XML的Encoding类型。因此,需要手动修改MarkUp.cpp文件的第1552行。
    将“m_strEncoding = MCD_T("UTF-8");”修改为“m_strEncoding = MCD_T("GB2312");”。