我有一个servlet,它创建一个html表单,其中包含一组复选框,这些复选框的name属性中包含汉字。当我提交表单时,我通过调用以下方法检索它们:
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。
我有一个servlet,它创建一个html表单,其中包含一组复选框,这些复选框的name属性中包含汉字。提交表单时,我通过调用以下内容来检索它们:String []值...
我在PHP中有同样的问题,我在结果上使用utf8_decode
来获取值。