java - 表情符号字符序列👇打破了旧的 XML 过程

标签 java xml unicode emoji

我有一个处理来自第三方数据提要的 XML 的旧 Java 应用程序。

数据提要允许用户输入,现在突然包含了表情符号,例如 �� (👇)。我真的很惊讶这个问题花了这么长时间才出现(表情符号已经存在几年了)。

应用程序在 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)

是否有一个快速的本地化修复程序,我可以在无需重新设计和重新构建整个应用程序的情况下应用?此外,宁愿避免正则表达式搜索/替换 hack,因为这会引入其他微妙的问题。

最佳答案

�� 是编码为代理项对(两个代理项)的单个字符。 XML 中的字符引用不能表示(高或低)代理项:这些不是合法字符。字符引用应代表整个表情符号的 Unicode 代码点,👇

第三方向您发送了无效的 XML,您应该拒绝它,就像拒绝供应商提供的任何其他有缺陷的商品一样。

关于java - 表情符号字符序列👇打破了旧的 XML 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53038978/

相关文章:

java - 如何在 Spring 应用程序中设置从不同表中提取数据的表单

java - 如何重新排序 CompletableFutures 流?

php - 在 PHP 中使用 XMLReader 读取 XML 和验证模式时出错

javascript - Javascript 中的跨浏览器标准 Xml 处理

python - six.text_type 与 text.decode ('utf8' 相同吗?

java - 如何从 ConstraintViolationException 中获取数据库字段名称 - Hibernamte

java - Kafka 反序列化嵌套泛型类型

android - 如何在java代码中设置 "toYDelta"属性?

java - Swing 的 Unicode 支持的限制

unicode - Lisp:在将八位字节流转换为格式错误的字节的 EUC-JP 时,需要帮助从 SBCL 获得正确的行为