2012-03-22 8 views
10

Nie wydaje mi się, aby zrozumieć cel XMLString::transcode(XMLCh*) i XMLString::transcode(char*), ponieważ oczywiście nie rozumiem różnicy między XMLCh* i char*. Czy ktoś może sprawić, że sprawy staną się jaśniejsze?Cel XMLString :: transkodowanie

Odpowiedz

19

Xerces wewnętrznie koduje informacje jako UTF-16. Dane UTF-16 są przechowywane przy użyciu typu danych XMLCh.

Łańcuchy w stylu C używają nazwy char, która znajduje się na lokalnej stronie kodowej (prawdopodobnie w formacie UTF-8, ale zależy to od platformy i ustawień). Do konwersji między tymi dwoma używa się transcode.

Na przykład, jeśli chcesz przekazać dane z Xerces do innej biblioteki i ta biblioteka oczekuje na tekst na lokalnej stronie kodowej, musisz to zrobić pod transcode. Ponadto, jeśli masz dane w formacie char i chcesz je przesłać do Xerces, musisz transcode je do XMLCh, ponieważ to właśnie rozumie Xerces.

Na przykład:

// 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); 

Nie zapomnij zwolnić ciąg! Lepiej jest napisać wokół niego opakowanie, ale dostępne są w Internecie examples (wystarczy wyszukać klasę o nazwie XercesString).

Jeśli chcesz wiedzieć więcej na temat kodowania Myślę, że powinieneś przeczytać The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

dzięki, że był bardzo pomocny! – Glolita

+0

Dodanie kilku wierszy kodu jako przykładu bardzo pomoże innym czytelnikom takim jak ja! – Jaywalker