复选框值未保持UTF-8编码

问题描述 投票:0回答:1

我有一个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 []值...

java servlets
1个回答
-1
投票

我在PHP中有同样的问题,我在结果上使用utf8_decode来获取值。

© www.soinside.com 2019 - 2024. All rights reserved.