【问题标题】:How to write the STX / ETX ( C0 control code) into the BSTR buffer IXMLDOMElement*如何将 STX / ETX(C0 控制代码)写入 BSTR 缓冲区 IXMLDOMElement*
【发布时间】:2012-03-14 20:12:17
【问题描述】:

我有一个应用程序将一个 (BSTR* ProfileXml) 作为输出参数传递。 所以我在使用 SysAllocString(Profile) 分配配置文件后发送配置文件

WCHAR   Profile[] = 
L"<IhvSecurity xmlns=\"http://www.sampleihv.com/nwifi/profile\">"
L"<IHVSecurityParam2>parameter value</IHVSecurityParam2>"
L"</IhvSecurity>";

几乎所有 ascii 字符的参数值都可以正常工作(不包括 C0 代码,如 STX ascii 代码 2 ETX ascii 代码 3)。 一旦我发送 STX 或 ETX 应用程序发送错误并要求有效的 xml 缓冲区,我正在使用 IXMLDOMElement 方法加载配置文件缓冲区和修改缓冲区并再次保存缓冲区。 我没有提到配置文件字符串缓冲区中的编码默认是 utf - 8。

所以我在这里做错了,或者我们不能在 xml 中使用 STX / ETX ??? MSMXL 解析器无法解析它们。或者他们以某种方式/API 将其写入参数缓冲区是节点。

任何帮助将不胜感激

谢谢

【问题讨论】:

  • Brrr,那些用于串行端口通信的控制代码。您得到糟糕的过时文档并且不必再使用这些控制代码来指示字符串的开始和结束的可能性有多大?在xml中当然没有必要。试试看。

标签: c++ c xml ixmldomdocument


【解决方案1】:

你是对的,you can't use control characters in XML 1.0。请参阅valid range 的规范。 XML 1.1 增加了对这些控制字符的支持,但我认为 MSXML 不支持 XML 1.1。

作为一种解决方法,您可以实施某种转义方案,然后在另一端对其进行解码。

【讨论】:

  • 你能举一些例子来逃避这个吗?
  • 我的意思是:在将字符串作为 XML 元素包含之前,请转义任何无效字符(那些不在 XML 1.0 规范中给出的范围内的字符)。没有标准的方法可以做到这一点。 One option is _xhhhh_, which is apparently what Excel does。所以 STX 变成 _x0002_。然后,任何从 XML 读取数据的软件都必须实现这种编码的逆向。最后,原始字符串中的任何下划线字符也必须被转义,并且不会被接收者转义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 2015-03-26
  • 2021-01-13
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多