2012-03-22 31 views
10

XMLCh*char*の違いはわからないので、私はXMLString::transcode(XMLCh*)XMLString::transcode(char*)の目的を理解していないようです。 誰かが私のために物事をもっときれいにしてくれますか?目的XMLString :: transcodeの目的

答えて

19

Xercesは、情報をUTF-16として内部的に符号化します。 UTF-16データは、XMLChデータ型を使用して格納されます。

'Cスタイル'の文字列はローカルコードページ(おそらくUTF-8ですが、プラットフォームと設定によって異なります)にあるcharを使用します。transcodeを使用して2つの間の変換を行います。

たとえば、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); 

は、文字列を解放することを忘れないでください!ラウンドラッパーを書く方が良いですが、examplesがインターネット上にあります(XercesStringという名前のクラスを検索するだけです)。

あなたは私はあなたが本当に便利だったThe Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

感謝を読むべきだと思うのエンコーディングについての詳細をお知りになりたい場合は! – Glolita

+0

例のように数行のコードを追加すると、私のような他の読者には大いに役立ちます! – Jaywalker