SERE0014: недопустимый символ HTML - исключение десятичного 129 при разборе управляющих символов - PullRequest
0 голосов
/ 04 сентября 2018

Недавно в одном случае я обнаружил строку с управляющим символом, которую мы сохраняем в БД и пытаемся создать из нее XML и HTML-файл. Он правильно сохраняется в БД и отображается следующим образом в разных местах.
1) При запросе в БД имя отображается как enter image description here.
2) Когда я копирую это в notepad ++ (кодировка UTF-8), оно отображается как enter image description here.
3) В Eclipse IDE режим отладки показывает то же самое, что и DB.
4) В табличных записях на странице HTML (apache / tomcat) и в виде вывода sysout в консоли это выглядит просто: enter image description here, что, на мой взгляд, является предпочтительным и предполагаемым выводом.

Я могу создать файл XML с каким-то ненужным символом, но когда я пытаюсь создать HTML, используя javax TransformerFactory с кодировкой UTF-8. transformer.transform(source, result);
выдает исключение «Недопустимый символ HTML - десятичный 129» .
Я понимаю, что в строке есть некоторый управляющий символ, который не поддерживается UTF-8, и, таким образом, анализатор выдает это исключение.
Я нашел его ссылки здесь: https://www.fileformat.info/info/unicode/char/0081/index.htm

Чтобы решить эту проблему, я попробовал много вещей, но одна из них, которая в результате приближается к предполагаемой, состоит в том, чтобы вручную проанализировать строки перед передачей их анализатору и заменить на строку UTF-8, как показано ниже:
String str = new String(nodeValue.getBytes(StandardCharsets.US_ASCII), StandardCharsets.UTF_8); str = str.replaceAll("[^\p{ASCII}]", "");

Это решает проблему до определенного уровня, но я думаю, что синтаксический анализ всего содержимого не является предпочтительным, чтобы удалить 1 управляющий символ из строки, и это также преобразование имени enter image description here в enter image description here, что не является предпочтительным, я на самом деле хочу это без каких-либо изменений.

Есть ли какой-нибудь стандартный способ сделать это, чтобы мы могли получить правильный вывод в разобранном HTML?

Как HTML-страница sysout и apache tomcat показывает это правильно? Они обращаются с этим явно?

1 Ответ

0 голосов
/ 05 сентября 2018

 недопустимо в HTML независимо от того, как вы выражаете его как символ в документе.

Похоже, кто-то проверяет вас. Либо графический интерфейс не должен был позволять это, либо вы должны жить с невозможностью показать его в HTML. Если вам просто нужно показать это, вы можете преобразовать его в изображение. К сожалению, для [HOP] нет контрольной картинки .

...