【问题标题】:Checkbox value not keeping UTF-8 encoding复选框值不保持 UTF-8 编码
【发布时间】: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。

【问题讨论】:

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

标签: java servlets


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2017-05-13
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多