XMLLite程序忽略编码
问题描述:
我要读用C XML文件++和我们使用XMLLite
我的问题是,我的XML的第一行指定的编码XMLLite程序忽略编码
<?xml version="1.0" encoding="ISO-8859-15"?>
,当我尝试解析与文件XMLLite,我得到错误MX_E_ENCODINGSIGNATURE
。如果我删除编码部分,XML解析得很好。
<?xml version="1.0"?>
因此,有可能以编程方式告诉XMLLite忽略编码和解码。我还有什么其他选择?
一个解决方案是编写我自己的输入流类,并压缩这个头,并注入短版本,但它会更好,有一个干净的解决方案。
答
尽管文档说XMLLite无法处理不同的编码,但似乎可以使用文档中提到的IMultiLanguage2
来解决此问题,但没有给出示例。
因此,这里是如何启用它:
#include <mlang.h>
XMLLiteReader::XMLLiteReader(void)
{
mLanguage = NULL;
mXMLLiteReader = NULL;
mCOMInitialized = false;
HRESULT hr;
if(CoInitialize(NULL) != S_OK)
return;
mCOMInitialized = true;
if((hr = CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_ALL, IID_IMultiLanguage2, (void **)&mLanguage)) != S_OK)
return;
hr = CreateXmlReader(__uuidof(IXmlReader), (void**) &mXMLLiteReader, NULL);
if(hr != S_OK)
{
mXMLLiteReader = NULL;
return;
}
hr = mXMLLiteReader->SetProperty(XmlReaderProperty_MultiLanguage, (LONG_PTR)mLanguage);
}