【发布时间】:2014-01-13 09:26:46
【问题描述】:
IDE:Embarcadero XE5 c++ 构建器。
我正在尝试在 XML CData 部分中转储 UnicodeStrings。
这样一个字符串的小摘录:
u"‰PNG\r\n\x1A\n\0\0\0\rIHDR\0\0\0õ\0\0\02\b\x06\0\0\0„\\i\0\0\0\x01sRGB\0®Î\x1Cé\0\0\0\x04gAMA\0\0±\vüa\x05\0\0\0\tpHYs\0\0\x0EÃ\0\0\x0EÃ\x01Ço¨d\0\0\v¼IDATxÚíœypUÕ\x19ÀO\x06…°¤\x04D$ˆ²\b1š\b\x18@...etc"
我知道 XML 文档可以包含非 ASCII 字符,并且我认为 XML CData 部分的内容不会被 XML 解析器解析(除了部分结束指示符“[[> ”,我的数据中不存在,检查了它)。
创建(编写)CData 部分时,我仍然收到“创建节点时在文本内容中发现无效字符”错误。
代码示例:
_di_IXMLDocument pXMLDocument = NewXMLDocument("1.0");
// I've played around with the document encoding with no success, guessing it's only applicable while reading the document.
// pXMLDocument->SetEncoding(L"iso-8859-1");
String myString; // Unicode, contains my data string.
// 1st param of CreateNode method is of type UnicodeString.
di_IXMLNode pCDataNode = pXMLDocument->CreateNode( myString, ntCData );
关于为什么失败的任何想法?编码问题?
【问题讨论】:
-
看来问题实际上可能出在字符串的内容上。由于数据的“随机”性质,字符串包含大量字符文字(转义字符)......并且它们被错误地(根据我的要求)解释为这样。导致问题。因此,在创建 CData 节点之前,需要为数据字符串解析转义字符。
标签: c++ xml c++builder