2012-03-22 23 views
10

我似乎并不了解XMLString::transcode(XMLCh*)XMLString::transcode(char*)的用途,因为很明显我不明白XMLCh*char*之间的区别。 有人能让我更清楚吗?XMLString :: transcode的用途

回答

19

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

+0

感谢,这是非常有帮助! – Glolita 2012-03-23 08:56:36

+0

添加几行代码作为示例,对于像我这样的其他读者会有所帮助! – Jaywalker 2012-04-11 11:02:32