【发布时间】:2013-04-10 13:54:44
【问题描述】:
我有一个 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。
【问题讨论】:
-
现在要观察问题,我们必须创建一个复选框,选择一些值并进行测试。很有可能我们会以与您完全不同的方式来做这件事,具有不同的价值。这意味着我们不会解决您的问题(如果我们遇到问题)。为了让这个地方适合你,你需要写一个关于这个问题的小例子。可以编译并演示问题的一种。然后你会有几十个人愿意做最后一点(解决问题),争取先解决它。
-
感谢您的评论。我听从了您的建议并添加了代码。