XMLString :: transcode的目的

时间:2012-03-22 16:29:14

标签: c++ string xml-parsing char xerces-c

我似乎不理解XMLString::transcode(XMLCh*)XMLString::transcode(char*)的目的,因为很明显我不理解XMLCh*char*之间的区别。 有人可以帮我更清楚一点吗?

1 个答案:

答案 0 :(得分:24)

Xerces在内部将信息编码为UTF-16。 UTF-16数据使用XMLCh数据类型存储。

'C风格'字符串使用char,它位于本地代码页(可能是UTF-8,但它取决于平台和设置)。您使用transcode在两者之间进行转换。

例如,如果您想将某些数据从Xerces提供给另一个库,并且该库需要本地代码页中的文本,则需要transcode它。另外,如果您有char数据并希望将其提供给Xerces,则需要transcode将其提供给XMLCh,因为这是Xerces所理解的。

例如:

// to local code page
DOMNode *node = ...;
char* temp = XMLString::transcode(node->getNodeValue()); 
std::string value(temp);
XMLString::release(&temp); 

// from local code page
DOMElement *element = ...;
XMLCh *tag = XMLString::transcode("test");
DOMNodeList *list = element->getElementsByTagName(tag);
XMLString::release(&tag);

不要忘记释放字符串!更好的是围绕它编写一些包装,但互联网上有examples可用(只需搜索名为XercesString的类。)

如果您想了解有关编码的更多信息,我认为您应该阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)