【问题标题】:Purpose of XMLString::transcodeXMLString::transcode 的用途
【发布时间】:2012-04-07 06:20:50
【问题描述】:

我似乎不明白 XMLString::transcode(XMLCh*)XMLString::transcode(char*) 的用途,因为显然我不明白 XMLCh*char* 之间的区别。 有人可以帮我解释清楚吗?

【问题讨论】:

    标签: c++ string xml-parsing char xerces-c


    【解决方案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);
    

    不要忘记释放字符串!更好的做法是围绕它编写一些包装器,但互联网上有 examples 可用(只需搜索名为 XercesString 的类)。

    如果您想了解有关编码的更多信息,我认为您应该阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

    【讨论】:

    • 添加几行代码作为示例将对像我这样的其他读者有很大帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多