环境 :windows 20000 ,jdk1.6,Tomcat 6.0,MyEclipse 6.0jsp:<%@ page contentType="text/html; charset=utf-8" language="java" %>
    <html:form action="/list" method="POST">
action:
     request.setCharacterEncoding("UTF-8"); 
      String one = request.getParameter("one");  
现在接收到的one是乱码,这是为什么啊另外

   不写:request.setCharacterEncoding("UTF-8");
   用:String one = request.getParameter("one"); 
       one = new String(one.getBytes("ISO8859-1"),"utf-8");
   正确

    

解决方案 »

  1.   

     
    我以前也有一个这样的例子
    当 写one = new String(one.getBytes("ISO8859-1"),"utf-8"); 
    用a手机访问我的手机网站没问题
    用b手机就出问题当 不写one = new String(one.getBytes("ISO8859-1"),"utf-8"); 
    用b手机访问我的手机网站没问题
    用a手机就出问题
    这也和本地的字符编码有关吧。据我所知,在传输数据的时候,尤其是内容出现gbk gb2312 utf-8 这些编码的时候。
    默认都会以 iso8859-1来传输。 
    而设置字符编码的request.setCharacterEncoding("UTF-8"); 有时候是完全不起作用的,至于为什么。没去仔细研究
    我想这些所有的数据在传输的时候 
    多少都和浏览器还有操作系统有关系。
    至于什么关系,自己多弄几个实验的看下。就知道了。
      

  2.   

    当然 必要的设置也是必须的
    譬如 如下的语句是得有的 
    <META   HTTP-EQUIV="content-type"   CONTENT="text/html;   charset=utf-8">譬如 如下的浏览器也是如此设置的。在浏览器的设置中 
    internet选项>>高级>>总是以utf-8发送url 也是要勾选上的。。 
      

  3.   

    遇到过类似的问题
    当使用的解决方案是:
    写一个filter,截获所有*.do的请求
    在这个filter里设置一下编码方式
    request.setCharacterEncoding("gbk");
    response.setContentType("text/html; charset=GBK");
    这样就解决了。问题出现的原因是你的action类是继承了struts的ActionServlet,而在这个类里面是没有做编码类型设定的。
      

  4.   

    但为什么lz加入了
    request.setCharacterEncoding("UTF-8"); 
    还是不管用的原因就不清楚了。
    跟我之前遇到的情况很类似。
    说错的地方请高手指正 ,呵呵、。
      

  5.   

    估计是别的过滤器干的好事
    request.setCharacterEncoding("UTF-8"); 
    这一句应该是读取数据的第一个语句才行。如果别的过滤器读取了数据,则你再设置就无效了!你可以
    request.gettCharacterEncoding() 看看当前是什么! 
      

  6.   

    我用过下面的方式企图测试编码的变化
    String myencode1=request.gettCharacterEncoding()
    request.setCharacterEncoding("UTF-8"); 
    String myencode2=request.gettCharacterEncoding()可是myencode1和myencode2都是看不到值地
      

  7.   

    在浏览器的设置中 
    internet选项>>高级>>总是以utf-8发送url 也是要勾选上的。。 
    这个是勾上地
    下面的代码已经在函数的最上方了
    request.setCharacterEncoding("UTF-8"); 
    String one = request.getParameter("one");  
      

  8.   

    在浏览器的设置中 
    internet选项>>高级>>总是以utf-8发送url 也是要勾选上的。。 
    这个是勾上地
    下面的代码已经在函数的最上方了
    request.setCharacterEncoding("UTF-8"); 
    String one = request.getParameter("one");  
      

  9.   

    1.修改Tomcat中conf/server.xml文件中 在 <Connector
    port="8080"     ...处添加URIEncoding="UTF-8"。2.编写一个过滤器类CharacterEncodingFilterpackage com.lyb.example;import 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 { public void destroy() {
    // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    chain.doFilter(request,response);
    // TODO Auto-generated method stub } public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub }}
    3.在web.xml中添加过滤器映射
    <filter>
      <filter-name>characterEncoding</filter-name>
      <filter-class>com.lyb.example.CharacterEncodingFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>characterEncoding</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>OK。重新启动Tomcat即可
      

  10.   

    你是通过URL传送参数的吧,如果是就要转换编码的。
      

  11.   

    非常感谢楼上的各位to :lybjust 
    你说的方法,我实验了,是好用地,
    不过,我还不知道,我所问的问题,是怎么会事
    to :wpabbs 
    我是用这种方式提交地;
    jsp:javascript:
    document.ListForm.action="/zeronetext/list.do?sign=addlist";
    document.ListForm.submit();
    jsp:
    <textarea name="one" cols="50" rows="10" id="one"></textarea>
    action:
    String one = request.getParameter("one");  
      

  12.   

    tomcat5.0以后post和get分开处理
    1、post提交的数据: 
    程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器. 
    <filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
    <param-name>encoding</param-name> 
    <param-value>UTF8</param-value> 
    </init-param> 
    <init-param> 
    <param-name>forceEncoding</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    </filter> <filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>*.html</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
    </filter-mapping> 这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding); 
    在 这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使 setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法 就是把这个过滤器尽量靠前放. 
    2、get提交的数据:
    <Connector port="8080" 
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
    enableLookups="false" redirectPort="8443" acceptCount="100" 
    debug="0" connectionTimeout="20000" useBodyEncodingForURI="true" 
    disableUploadTimeout="true" /> 加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容. 
     
      

  13.   

    与web服务器的编码也有关系的
      

  14.   

    使用過濾器!
    添加一個Servlet,代碼如下:package com.accp.servlet;import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Enumeration;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;public class EncodeFilter implements Filter
    { /**
     * 销毁方法
     * 该方法在Filter被销毁时被容器调用
     */
    public void destroy()
    {
    // TODO 自动生成方法存根 }

    /**
     * 该方法实现将以iso-8859-1编码的字符串转换成编码为utf-8以支持
     * 中文
     * @param inStr
     * @return
     * @throws UnsupportedEncodingException
     */
    private String toUTF(String inStr) throws UnsupportedEncodingException
    {
    String outStr = "";
    if(inStr != null)
    {
    outStr = new String(inStr.getBytes("iso-8859-1"),"utf-8");
    }
    return outStr;
    } /**
     * 过滤方法
     * 该方法在过滤请求或响应时被调用
     * 所有匹配的请求在被发送到服务器前会
     * 先"到此一游"
     * 所有的响应在被响应到客户端前会
     * 先"到此一游"
     */
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chan) throws IOException, ServletException
    {

    //取得客户端的提交方式
    String method = ((HttpServletRequest)request).getMethod();
    //判断客户端的提交方式
    if(method.equalsIgnoreCase("post"))
    {
    //设置请求对象支持中文的字符集
    request.setCharacterEncoding("utf-8");
    }
    else
    {
    //取出客户端提交的所有的参数名,是一个枚举
    Enumeration<String> paramNames = request.getParameterNames();
    while(paramNames.hasMoreElements())//遍历
    {
    String name = paramNames.nextElement();//取出每个参数名称
    String values[] = request.getParameterValues(name);//根据参数名称取得参数值

    if(values != null)//判断参数是否有值
    {
    if(values.length == 1)//判断参数是否单值
    {
    //调用toUTF(values[0])方法转换参数值的字符编码
    //并将该值以属性的形式藏在request
    request.setAttribute(name, toUTF(values[0]));
    }
    else
    {
    for(int i=0;i<values.length;i++)
    {
    //循环依次将每个值调用toUTF(values[0])方法转换参数值的字符编码
    values[i] = toUTF(values[i]);
    }
    //将该值以属性的形式藏在request
    request.setAttribute(name, values);
    }
    }
    }
    } //设置响应对象的响应模式和支持中文的字符集
    response.setContentType("text/html;charset=utf-8");
    //调用过滤器链中其他过滤器
    chan.doFilter(request, response);
    } /**
     * 初始化方法
     * 该方法在Filter被初始化时被容器调用
     */
    public void init(FilterConfig arg0) throws ServletException
    {
    // TODO 自动生成方法存根 }}然後再將web.xml中加入以下代碼(配置請求的/next使用過濾器): <!-- 定义一个过滤器 -->
    <filter>
    <!-- 定义一个过滤器的别名 -->
    <filter-name>MyFilter</filter-name>
    <!-- 该过滤器的类的位置 -->
    <filter-class>com.accp.servlet.EncodeFilter</filter-class>
    </filter>
    <!-- 过滤器映射 -->
    <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <!-- 指定过滤器应该和必须过滤的请求 -->
    <url-pattern>/next</url-pattern>
    </filter-mapping>

      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.accp.servlet.LoginServlet</servlet-class>
      </servlet>  <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/next</url-pattern>
      </servlet-mapping>
    </web-app>
      

  15.   

     request.setCharacterEncoding("UTF-8"); 是当调用action 跳转时, 以UTF-8 的编码把请求发送出去。  String one = request.getParameter("one");  
    是通过getParameter 获得对应的值,根本没转编码集。one = new String(one.getBytes("ISO8859-1"),"utf-8"); 
    是把获得到的one 转成utf-8 的字符编码集
      

  16.   

    在filter中:
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException 
           {
    arg0.setCharacterEncoding("gbk");
    arg1.setCharacterEncoding("gbk");
    arg2.doFilter(arg0, arg1); }在web.xml中:
      <filter>
        <filter-name>filter</filter-name>
        <filter-class>com.filter.Filter</filter-class>
      </filter>  <filter-mapping>
        <filter-name>filter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>