0

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 に設定されているため、理由がわかりません。

4

1 に答える 1