Кажется, я не понимаю цели XMLString::transcode(XMLCh*)
и XMLString::transcode(char*)
, потому что, очевидно, я не понимаю разницы между XMLCh*
и char*
.
Может кто-то, пожалуйста, сделает меня более понятным?
Назначение XMLString:: transcode
Ответ 1
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 и наборах символов (без отговорок!)