В UTF-8 Упячка
фактически должно быть представлено как \x423\x43F\x44F\x447\x43A\x430
. \xD0\xA3\xD0\xBF\xD1\x8F...
означает, что они были неправильно закодированы с использованием ISO-8859-1.
Вот тестовый фрагмент, который доказывает это:
String s = new String("Упячка".getBytes("UTF-8"), "ISO-8859-1"); // First decode with UTF-8, then (incorrectly) encode with ISO-8859-1.
for (char c : s.toCharArray()) {
System.out.printf("\\x%X", (int) c);
}
Какие отпечатки
\xD0\xA3\xD0\xBF\xD1\x8F\xD1\x87\xD0\xBA\xD0\xB0
Так что ваша проблема должна быть решена на шаг раньше. Поскольку вы говорите о веб-приложении Java, и эта строка, вероятно, является результатом пользовательского ввода, вы уверены, что позаботились о кодировках HTTP-запросов и ответов? Во-первых, в JSP необходимо добавить следующее в начало JSP:
<%@ page pageEncoding="UTF-8" %>
Это не только отображает страницу в UTF-8, но также неявно устанавливает заголовок ответа HTTP Content-Type
, указывающий клиенту, что страница отображается с использованием UTF-8, чтобы клиент знал что он должен отображать любой контент и обрабатывать любые формы, используя ту же кодировку.
Теперь, часть HTTP-запроса, для GET-запросов вам нужно настроить рассматриваемый контейнер сервлетов. Например, в Tomcat это вопрос установки атрибута URIEncoding
HTTP-соединителя в /conf/server.xml
соответственно. Для запросов POST это должно быть уже сделано клиентом (веб-браузером) достаточно умным, чтобы использовать кодировку ответа, как указано в JSP. Если этого не произойдет, вам нужно будет ввести Filter
, который проверяет и устанавливает кодировку запроса.
Для получения дополнительной справочной информации вы можете найти эту статью полезной.
Помимо всего этого, в MySQL есть еще одна проблема с символами Unicode. Он поддерживает только символы UTF-8 до 3 байтов , но не 4 байта. Другими словами, поддерживается только диапазон BMP из 65535 символов, за исключением того, что нет. PostgreSQL, например, полностью поддерживает это. Это может не повредить вашему веб-приложению, но об этом, безусловно, следует помнить.