Назначение XMLString :: transcode - PullRequest
       14

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

11 голосов
/ 22 марта 2012

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

1 Ответ

24 голосов
/ 23 марта 2012

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

...