0

我有一个 servlet,它创建一个 html 表单,其中包含一组在其名称属性中包含中文字符的复选框。当我提交表单时,我通过调用来检索这些:

String[] values = request.getParameterValues("checkbox");

但是,当我尝试查看各个值时,文本似乎出现了错误的编码。在我的两个 servlet 中,我将 contentType 字符集设置为 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">

当我查看页面时,一切看起来都很好。我可以很好地看到角色。但是,当我提交时,字符会像使用不同的编码一样出现。在 servlet 中,我正在以这种方式检查它。

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

-1

我在 PHP 中遇到了同样的问题,我用utf8_decode结果来获取值。

于 2020-02-21T13:36:25.660 回答