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