我似乎不了解XMLString::transcode(XMLCh*)XMLString::transcode(char*)的目的,因为显然我不了解XMLCh*char*之间的区别。
有人可以帮我弄清楚吗?

最佳答案

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!)

关于c++ - XMLString::transcode的目的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9826518/

10-12 07:35