从一个html页面中取的参数时老是出现乱码!但是java文件中包含中文显示正常 
部分代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
      resp.setContentType("text/html;charset=gb2312"); 
      PrintWriter out= resp.getWriter();       String title = "Reading All Request Parameters"; 
      out.println("<html><head><title>读取所有参数</title></head>" 
                  + "<BODY BGCOLOR='#FDF5E6'>\n" + "<H1 ALIGN=CENTER>" + title 
                  + "</H1>\n" + "<TABLE BORDER=1 ALIGN=CENTER>\n" 
                  + "<TR BGCOLOR=\"#FFAD00\">\n" 
                  + "<TH>Parameter Name<TH>Parameter Value(s)"); 
      Enumeration paramNames = req.getParameterNames(); 
      while (paramNames.hasMoreElements()) { 
      String paramName = (String) paramNames.nextElement(); 
      out.print("<TR><TD>" + paramName + "\n<TD>"); 
      String[] paramValues = req.getParameterValues(paramName); 
      if (paramValues.length == 1) { 
          String paramValue = paramValues[0]; 
          if (paramValue.length() == 0) 
               out.println("<I>No Value</I>"); 
          else 
                out.println(paramValue); 
      } else { 
      out.println("<UL>"); 
      for (int i = 0; i < paramValues.length; i++) { 
      out.println("<LI>" + paramValues[i]); 
      } 
  out.println("</UL>");}   } 
out.println(" 上的风格</TABLE>\n</BODY></HTML>"); 

其中比如“上的风格”四个字能正确的显示出来! 
但是从html页面传递过来的中文参数显示出的是一对乱码中文!如: 
“龙”为“榫?”

解决方案 »

  1.   

    html源文件如下:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>a simple apply for test</title>
    </head>
    <body >
    <h1 align=center>A Simple Form using Post</h1>
     <tr>
      <center><img src=asf-logo.gif></center>
      <form action="ShowParams" method="get">
      <table border=1 width=250>
      <caption> <h1>Form<h1></caption>
         <tr>
         <td>Item Number:</td><td><input type="text" name="itemNum"></td><br>
         </tr>
         <tr>
         <td>Quantity:</td><td><input type="text" name="quantity"></td><br>
         </tr>
         <tr>
         <td>Prince Each:</td><td><input type="text" name="prince" value="$"></td><br>
         </tr>
         <hr>
         <tr>
         <td>Name:</td><td><input type="text"  name="name"></td><br>
         </tr>
         <td>Photoname:</td><td><input type=text name="no"></td><br>
         <tr><td>Address:</td><td><textarea type="text" name="address" cols=40  rows=3></textarea><br>
         </td></tr>
         
         <tr ><td>Credit Card:</td>
         <td><input type="RADIO" name="cardtype"
                            value="Visa">Visa<br>
         <input type="RADIO" name="cardtype"
                            value="Master Card">Master Card<br>
         <input type="RADIO" name="cardtype"
                            value="Amex">Amex<br>
        <input type="RADIO" name="cardtype"
                            value="Disvover">Disvover<br>
        <input type="RADIO" name="cardtype"
                            value="Java SmartCard">Java SmartCard<br></td>
                            </tr>
        
        <tr>
        <td>Credit card Number:</td>
        <td><INPUT type="password" name="cardnum"></td><br>
    </tr>
    <tr>
      <td>  Repeat Credit card Number:</td>
       <td> <input type="password" name="cardnum"></td><br>
        
       </tr> 
       <tr colspan=2>    <td><input type="submit" value="sumbit order"></td>
       </tr>
       </table>
      </form>
    <br><br><br><br><br><br><br><br><br>
    </body>
    </html>
      

  2.   

    resp.setContentType("text/html;charset=gb2312"); 
    改成
    resp.setContentType("text/html;charset=utf-8");
    你要和html编码一致才行啊。记得清除缓存。 
      

  3.   

    页面之间传中文参数
    由于传递和显示编码不同会出现乱码
    用的时候可以先转码
    paramName==new   String(paramName.getBytes("iso8859-1"),"GB2312") ;
      

  4.   

    楼上的说的有道理,还有在你修改了jsp页面后,一定要记得清理tomcat缓存再重启,我以前吃过这方面的亏
      

  5.   

    用四楼的方法,将
    String[] paramValues = req.getParameterValues(paramName); 
    换成
    String[] paramValues = new  String(req.getParameterValues(paramName).getBytes("iso8859-1"),"GB2312") ;
    然后重新启动tomcat
      

  6.   

    tomcat下的server.xml中的设置端口标签的后面添加红色部分:
    <Connector port="8888" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" URIEnconding="UTF-8"/>
      

  7.   

    字符编码问题,试一下把 resp.setContentType("text/html;charset=gb2312"); 
    改为
     resp.setContentType("text/html;charset=UTF-8"); 
      

  8.   

    写个过滤器才是对的~~~这样写代码那么每个Action都要写~~~如果你用Spring~~Spring有自带的过滤器~~~在web.xml中配置下: <filter>
      <filter-name>Spring encoding filter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>gb2312</param-value>
      </init-param>
       </filter>
       <filter-mapping>
       <filter-name>Spring encoding filter</filter-name>
       <url-pattern>/*</url-pattern>
       </filter-mapping>
      

  9.   

    在获取参数的最前面加上这一句就可以的
    request.setCharacterEncoding("utf-8");
    还有就是使用过滤器CharacterEncodingFilter.javaimport java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    /**
     * 
     * 设置编码方式,过滤所有的请求
     */public class CharacterEncodingFilter implements Filter {
     FilterConfig config=null;
    private String encoding = "gbk2312"; public void destroy() {
    config = null;
    } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding(encoding);
    chain.doFilter(request, response);
    } public void init(FilterConfig config) throws ServletException {
    this.config = config;
    encoding = config.getInitParameter("config"); }}
    在xml文件中这样配置<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>
    shenghua.zhang.com.CharacterEncodingFilter
    </filter-class>
    <init-param>
    <param-name>config</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>