我有一个 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。