Последовательность символов Emoji ? нарушает старый процесс XML - PullRequest
0 голосов
/ 29 октября 2018

У меня есть старое 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)

Существует ли быстрое локализованное исправление, которое я могу применить, не перепроектируя и не перестраивая архитектуру всего приложения? Кроме того, мы бы предпочли избегать взлома поиска / замены регулярных выражений, поскольку это может привести к другим тонким проблемам.

1 Ответ

0 голосов
/ 29 октября 2018

�� - один символ, закодированный как суррогатная пара (два суррогата). Ссылка на символ в XML не может представлять (высокий или низкий) суррогат: это не допустимые символы. Ссылка на символ должна представлять кодовую точку Unicode для Emoji в целом, 👇.

Третья сторона отправляет вам недействительный XML, и вы должны отклонить его, как если бы вы отклонили любые другие неисправные товары от поставщика.

...