我有一个旧的Java应用程序,该应用程序处理来自第三方数据提要的XML。
数据馈送允许用户输入,现在它突然包含诸如��
()之类的表情符号。实际上,我很惊讶这个问题出现了这么长时间(表情符号已经出现了好几年了)。
该应用在javax.xml.parsers.DocumentBuilder.parse(InputStream)
中爆炸:
org.xml.sax.SAXParseException; lineNumber: 105; columnNumber: 3039; Character reference "&#
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
是否有可以应用的快速本地化修复程序,而无需重新设计和重新设计整个应用程序?另外,宁愿避免正则表达式搜索/替换黑客,因为这会带来其他细微的问题。
答案 0 :(得分:3)
��
是一个编码为代理对的单个字符(两个代理)。 XML中的字符引用不能表示(高或低)替代:这些不是合法字符。字符引用应该代表整个表情符号👇
的Unicode代码点。
第三方向您发送了无效的XML,您应该拒绝它,就像拒绝供应商的其他任何有缺陷的商品一样。