14

我似乎不明白 and 的目的XMLString::transcode(XMLCh*)XMLString::transcode(char*)因为显然我不明白XMLCh*and之间的区别char*。有人可以让我更清楚吗?

4

1 回答 1

28

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

'C-style' 字符串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);

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

如果您想了解有关编码的更多信息,我认为您应该阅读每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)

于 2012-03-22T20:52:18.273 回答