Em UTF-8,
Упячка
deve ser representado como \x423\x43F\x44F\x447\x43A\x430
. O \xD0\xA3\xD0\xBF\xD1\x8F...
implica que eles foram codificados incorretamente usando ISO-8859-1. Aqui está um trecho de teste que prova isso:
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);
}
Que imprime
\xD0\xA3\xD0\xBF\xD1\x8F\xD1\x87\xD0\xBA\xD0\xB0
Portanto, seu problema precisa ser resolvido um passo antes. Como você está falando sobre um aplicativo da Web Java e essa string provavelmente é resultado da entrada do usuário, você tem certeza de que tomou cuidado com as codificações de solicitação e resposta HTTP? Primeiro, no JSP, você precisa adicionar o seguinte ao topo do JSP:
<%@ page pageEncoding="UTF-8" %>
Isso não apenas renderiza a página em UTF-8, mas também define implicitamente um HTTP
Content-Type
cabeçalho de resposta instruindo o cliente que a página é renderizada usando UTF-8, para que o cliente saiba que deve exibir qualquer conteúdo e processar todos os formulários usando a mesma codificação. Agora, a parte da requisição HTTP, para requisições GET você precisa configurar o servletcontainer em questão. No Tomcat, por exemplo, é uma questão de configurar o
URIEncoding
atributo do conector HTTP
em /conf/server.xml
adequadamente. Para solicitações POST, isso já deve ser cuidado pelo cliente (webbrowser) ser inteligente o suficiente para usar a codificação de resposta conforme especificado na JSP. Se isso não acontecer, você precisará trazer um Filter
que verifica e conjuntos
a codificação da solicitação. Para obter mais informações básicas, você pode encontrar este artigo útil.
Além de tudo isso, o MySQL tem outro problema com caracteres Unicode. Ele suporta apenas caracteres UTF-8 até 3 bytes , não 4 bytes. Em outras palavras, apenas o intervalo BMP de 65.535 caracteres é suportado, fora não. O PostgreSQL, por exemplo, o suporta totalmente. Isso pode não prejudicar seu aplicativo da web, mas certamente é algo a ter em mente.