XMLString::transcode 的用途
Posted
技术标签:
【中文标题】XMLString::transcode 的用途【英文标题】:Purpose of XMLString::transcode 【发布时间】:2012-04-07 06:20:50 【问题描述】:我似乎不明白 XMLString::transcode(XMLCh*)
和 XMLString::transcode(char*)
的用途,因为显然我不明白 XMLCh*
和 char*
之间的区别。
有人可以帮我解释清楚吗?
【问题讨论】:
【参考方案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!)
【讨论】:
添加几行代码作为示例将对像我这样的其他读者有很大帮助!以上是关于XMLString::transcode 的用途的主要内容,如果未能解决你的问题,请参考以下文章
在构造函数中存储DbSet而不是调用DbContext.Set 适合各种用途