Это числовые объекты HTML.
Вероятно, данные взяты из формы HTML. Браузер отправлял текстовые вводы как числовые объекты, так как форма не указывала, что сервер принимает эту кодировку. Предполагая UTF-8:
Лучший HTML должен быть в правильной кодировке - просто для хорошей меры.
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
Форма должна указывать, что сервер принимает кодировку, не нуждаясь в числовых объектах.
<form action="/action_page.php" accept-charset="UTF-8">
Ремонт:
String s = ...
Pattern pattern = Pattern.compile("(?i)\\&#((x[A-F0-9]+)|\\d+);");
Matcher m = pattern.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String code = m.group(1);
if (code.startsWith("x") || code.startsWith("X")) {
code = "0" + code;
}
int codePoint = Integer.decode(code);
m.appendReplacement(sb, "");
sb.appendCodePoint(codePoint);
}
m.appendTail(sb);
s = sb.toString();
Числовые объекты представлены в двух формах: A
в базе 10 и ?
в базе 16.
В качестве альтернативы возможно StringEscapeUtils.unescapeHtml4 работает удовлетворительно.