name 属性に漢字を含むチェックボックスのグループを含む html フォームを作成するサーブレットがあります。フォームを送信すると、次のように呼び出してこれらを取得します。
String[] values = request.getParameterValues("checkbox");
ただし、個々の値を見ようとすると、テキストが間違ったエンコーディングで出力されているようです。両方のサーブレットで、contentType charset を UTF-8 に設定し、文字エンコーディングを UTF-8 に設定しました。そのため、エンコーディングが失われているように見える理由がわかりません。
コード:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
それからいくつかの他のhtmlのもの。
<form action="addVocab" method="get">
<%
HashMap<String, servlets.Hanzi> hanziMap = Tester.getHanziMap();
HashSet<String> concordance = Tester.getConcordance();
HashSet<String> knownWords = Tester.getKnownWords();
Hanzi hanzi = new Hanzi();
String simp;
LinkedList<String> defList;
for(String s : concordance){
if( !knownWords.contains(s) ){
hanzi = hanziMap.get(s);
simp = hanzi.getSimplified();
out.println("<input class=\"checkbox\" type=\"checkbox\" name = \"checkbox\" value="+simp+">");
}
}
%>
<input class = "submit" type="submit" value="Submit">
ページを表示すると、すべてが正常に表示されます。文字がよく見えます。ただし、送信すると、文字が異なるエンコーディングのように表示されます。サーブレットでは、このようにチェックしています。
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("In the server");
String[] values = request.getParameterValues("checkbox");
out.println(values.length);
for(String s : values){
out.println( s );
}
印刷するとこのように印刷されます。大 å¤ç¬ èªå·± å家 æ¶å 私の知る限り、すべてが UTF-8 に設定されているため、理由がわかりません。