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
したがって、問題は1ステップ前に解決する必要があります。 Java Webアプリケーションについて話しているのですが、この文字列はユーザー入力の結果である可能性が高いので、HTTP要求と応答のエンコーディングに注意を払っていますか?まず、JSPでは、JSPの先頭に以下を追加する必要があります。
<%@ page pageEncoding="UTF-8" %>
これにより、ページがUTF-8でレンダリングされるだけでなく、HTTP Content-Type
ページがUTF-8を使用してレンダリングされることをクライアントに指示する応答ヘッダー。これにより、クライアントは、コンテンツを表示し、同じエンコーディングを使用してフォームを処理する必要があることを認識します。
ここで、HTTPリクエストの部分です。GETリクエストの場合は、問題のservletcontainerを設定する必要があります。たとえばTomcatでは、これはURIEncoding
を設定する問題です。 HTTPコネクタ
の属性 /conf/server.xml
にあります によると。 POSTリクエストの場合、これは、JSPで指定されている応答エンコーディングを使用するのに十分なスマートさを備えたクライアント(Webブラウザ)によってすでに処理されている必要があります。そうでない場合は、Filter
を導入する必要があります チェック> および
背景情報の詳細については、この記事を参照してください。 便利です。
これとは別に、MySQLにはUnicode文字に関する別の問題があります。 UTF-8文字のみをサポートします