2012-03-22 40 views
10

Tôi dường như không hiểu mục đích của XMLString::transcode(XMLCh*)XMLString::transcode(char*), bởi vì rõ ràng là tôi không hiểu sự khác biệt giữa XMLCh*char*. Ai đó có thể làm cho mọi thứ rõ ràng hơn cho tôi không?Mục đích của XMLString :: transcode

Trả lời

19

Xerces mã hóa thông tin dưới dạng UTF-16 trong nội bộ. Dữ liệu UTF-16 được lưu trữ bằng kiểu dữ liệu XMLCh.

'Chuỗi kiểu C' sử dụng char nằm trong trang mã cục bộ (có thể là UTF-8, nhưng tùy thuộc vào nền tảng và cài đặt) Bạn sử dụng transcode để chuyển đổi giữa hai loại.

Ví dụ: nếu bạn muốn cấp một số dữ liệu từ Xerces vào thư viện khác và thư viện đó dự kiến ​​văn bản trong trang mã cục bộ, bạn cần phải transcode nó. Ngoài ra, nếu bạn có char dữ liệu và muốn cấp dữ liệu cho Xerces, bạn cần phải transcode nó đến XMLCh, bởi vì đó là những gì Xerces hiểu.

Ví dụ:

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

Đừng quên để giải phóng chuỗi! Tốt hơn là viết một số wrapper vòng nó nhưng có examples có sẵn trên internet (chỉ cần tìm kiếm một lớp có tên XercesString).

Nếu bạn muốn biết thêm về mã hóa, tôi nghĩ bạn nên đọc The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

cảm ơn điều đó thực sự hữu ích! – Glolita

+0

Việc thêm một vài dòng mã làm ví dụ sẽ giúp ích rất nhiều cho những độc giả khác như tôi! – Jaywalker