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 и наборах символов (никаких оправданий!)