servlet从oracle获取数据时可以显示中文,从页面通过servlet写数据到oracle时,变成乱码“团贔,
求解

解决方案 »

  1.   

    1.在你的jsp页面开始的位置确保写入:
    <%@ page contentType="text/html; charset=GBK" %>
    2.用post提交
    3.用这个转换方法再试试看
    public String transform(String s)
     {
      String emp = null;
      try {
       emp = new String(s.getBytes("iso-8859-1"));
      } catch (UnsupportedEncodingException e) {
       System.out.println("中文处理异常:" + e.getMessage());
      }
      return emp;
     }
      

  2.   

    乱码具体解决方案:中文乱码过滤器web.xml中
    1.
    注意乱码过滤器要写在struts2过滤器之前,因为servlet是按照filter的声明先后顺序来执行过滤的
     <!-- 中文乱码过滤器 -->
      <filter>
                <filter-name>encodeFilter</filter-name>
                <filter-class>com.kingback.mile.encoding.EncodeFilter</filter-class>
                <init-param>
                    <param-name>encoding</param-name>
                    <param-value>UTF-8</param-value>
                </init-param>
     </filter>
     <filter-mapping>
                <filter-name>encodeFilter</filter-name>
                <url-pattern>/*</url-pattern>
     </filter-mapping>2.
    在com.kingback.mile.encoding下建一个EncodeFilter类
    package com.kingback.mile.encoding;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;import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;public class EncodeFilter extends StrutsPrepareAndExecuteFilter implements Filter   {
     private FilterConfig config = null;
         private String encoding = "UTF-8";
         
         @Override
         public void init(FilterConfig config) throws ServletException {
            this.config = config;
         }
         
         @Override
         public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
             if (encoding == null) {
                 encoding = config.getInitParameter("encoding");
                }
                request.setCharacterEncoding(encoding);
                response.setCharacterEncoding(encoding);
                chain.doFilter(request, response);
         }
     
        @Override
         public void destroy() {
             config = null;
             encoding = null;
         }
     
    }
    3.
    保证页面中的contentType="text/html; charset=utf-8" 和 pageEncoding="utf-8"一致
    4.
    如果以get方式提交,在这里还会有乱码,而post方式不会
    如果非要用get方式,则需要将服务器server.xml中的connector标签中设定编码与之前的几个地方一致
      

  3.   

    楼上 过滤器,项目较大 页面较多的时候 建议 用楼上的方法,测试案例的话  直接在servlet 中 持久化数据库之前 
    request.setcharacterencoding() 和response.setcharacterencoding() 同时设置编码格式 ,
    -----
    doPost{
     request.setcharacterencoding();
     response.setcharacterencoding();
     String test=request.getparameter("test");
    }
    ----
     注意 编码格式要和页面统一,此法 包治百病,  除 Ajax 回调
      

  4.   

    IT0918liu :
    你说的方法我试了  页面从数据库读数据没问题,但是  从页面往数据库写数据就变成乱码了。