我写了一个servlet,用get方式提交访问这个servlet,tomcat默认会先转到iso8859-1,前几天我在servlet里用iso8859-1解码后再转到GBK,能够正常显示中文了。 可是今天突然又乱码了,我试了一下,在servlet里用iso8859-1解码后转成utf-8,能够正常显示中文了。我想请教一下,为什么会出现这样的问题?这里转到的GBK或是UTF-8,这两种编码格式是跟什么相关联的?
我一开始以为跟java源文件的编码格式有关系,可是我在eclipse里把java源文件的编码格式改成GBK后,还是需要转成utf-8才能正常显示。

解决方案 »

  1.   

    你应该一开始都把所有的编码设置为UTF-8  那样的话出现乱码问题的几率就会小很多 。 
      

  2.   

    你确定你的JSP页面文件也是 GBK 编码么?
    它是否和页面同属一个编码呢
      

  3.   

    写个Filter过滤器 转化所有的格式到utf-8
      

  4.   

    to 3楼 4楼   我写过filter  处理乱码的。   可是过滤和这个太大关系。  因为用get方式提交的时候,还没进url,tomcat就默认转成iso8859-1了。   是可以在toncar配置文件里面改uriencoding什么的,   可是我是想弄明白这个东西,并不是单纯的正常显示。  现在只要先用iso8859-1解码后再转UTF-8就正常了。  to 2楼    我这里没有jsp页面,直接访问的servlet。
      

  5.   

    在编码的过程中将所有涉及到的编码格式全部改为utf-8
    这样可以省掉很多的麻烦
      

  6.   

    写一个filter 把请求来的数据进行UTF-8编码!tomcat 不需要进行更改!
      

  7.   

    <filter>
    <filter-name>springFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>springFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>但是提交方式只能为POST才有效,对GET提交方式无效。
      

  8.   

    如果你已经写了servlet 那建议你写一个filter 把编码改成utf-8 以后写的时候 尽量把页面编码改成utf-8 可以省下很多麻烦,如果你用到数据了,往数据库插入的数据含有中文,那就把tomcat的编码改一下,也改成utf-8
      

  9.   

    谢谢大家,不知道是不是我没能表达清楚,问题不是大家说的那样。   不过问题已经解决了。 原因在浏览器,之前用Firefox和IE,在地址栏敲中文提交,会自动转一次编码。而在chrome地址栏敲,不会自动转码,所以在servlet里面的处理也会不同。  结贴了吧。
      

  10.   

    ------------------------------------------java代码----------------------------------
    public class MyFilter implements Filter {
    protected String encodingName; 
    protected FilterConfig filterConfig;
    protected boolean enable;

    public MyFilter() {
    this.encodingName = "UTF-8";
    this.enable = false;
    }

    public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
    loadConfigParams();
    }

    private void loadConfigParams() {   
        this.encodingName = this.filterConfig.getInitParameter("encoding");   
        String strIgnoreFlag = this.filterConfig.getInitParameter("enable");   
        if (strIgnoreFlag.equalsIgnoreCase("true")) {   
          this.enable = true;   
        } else {   
          this.enable = false;   
        }   
      }   
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
      if(this.enable) {   
          request.setCharacterEncoding(this.encodingName);   
          response.setCharacterEncoding(this.encodingName);   
       }   
       chain.doFilter(request, response);    }

    public void destroy() {
    } ----------------------------------------------xml------------------------------------
     <filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <filter-class>
    com.filter.MyFilter
    </filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
    <param-name>enable</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>SetCharacterEncoding</filter-name>
    <servlet-name>action</servlet-name>
    </filter-mapping>