我有两个用Java编写的应用程序,它们通过网络使用XML消息相互通信.我在接收端使用SAX解析器从消息中取出数据.其中一个要求是将二进制数据嵌入XML消息中,但SAX不喜欢这样.有谁知道如何做到这一点?
更新:我使用apache commons编解码器库中的Base64类,以防其他人尝试类似的东西.
我如何在XML中存储base64字符串?
您是否使用CDATA在XML中存储base64字符串?它是否有用,因为它允许在字符串中使用<>?
base64是否可以配置,如果它们与XML冲突,你可以告诉它不要使用某些字符?
我想在XML文件中编码和解码二进制数据(使用Python,但无论如何).我必须面对XML标记内容具有非法字符的事实.XML规范中描述了唯一允许的:
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Run Code Online (Sandbox Code Playgroud)
这意味着不允许的是:
1个字节可以编码256种可能.通过这些限制,第一个字节限制为256-29-8-1-3 = 215个可能性.
在第一个字节的215个可能性中,base64仅使用64个可能性.Base64产生33%的开销(一旦用base64编码,6位变为1字节).
所以我的问题很简单:是否有一种比base64更有效的算法来编码XML中的二进制数据?如果没有,我们应该从哪里开始创建它?(图书馆等)
注意:你不会回答这个帖子"你不应该使用XML来编码二进制数据,因为......".只是不要.您最多可以争论为什么不使用215种不良XML解析器支持的可能性.
NB2:我不是在谈论第二个字节,但是当我们使用补充的Unicode平面时,肯定会有一些关于可用性的因素以及它应该从10xxxxxx开始遵守UTF8标准的事实(如果不是,那么? ).
我有一个看起来像这样的资源:
/users/{id}/summary?format={format}
Run Code Online (Sandbox Code Playgroud)
什么时候format是"xml"或"json"我用一个由WCF自动编码的用户摘要对象进行响应 - 到目前为止很好.但是当format等于"pdf"时,我希望我的回复包括一个简单的HTTP响应主体和一个PDF文件附件.
这是怎么做到的?黑客攻击WebOperationContext.Current.OutgoingResponse似乎不起作用,即使这样做也不会是正确的.在CDATA部分中包含文件的位或响应中的某些内容是不安全的.我应该创建一个子类Message,然后提供一个IDispatchMessageFormatter响应它的自定义?我走了一小段路,但最终发现文件不透明.
什么是对的?