Назначение XMLString:: transcode

Кажется, я не понимаю цели XMLString::transcode(XMLCh*) и XMLString::transcode(char*), потому что, очевидно, я не понимаю разницы между XMLCh* и char*. Может кто-то, пожалуйста, сделает меня более понятным?

Ответ 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 и наборах символов (без отговорок!)