我用java连Oracl,从Oracle中取出中文。我首先用一个static main方法来调用,可以取出中文。但是我用一个servlet来调用,取出来的中文就变成乱码了。请教各位高手,这个要怎么解决?而且用servlet调用时,插入中文都是正常的。

解决方案 »

  1.   


    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 javax.servlet.UnavailableException;
    public class EncodingFilter implements Filter { 
       protected String encoding = null;    
       protected FilterConfig filterConfig = null; 
          public void destroy() {  
                this.encoding = null;    
                    this.filterConfig = null;  
                      }  
        public void doFilter(ServletRequest request, ServletResponse response,
             FilterChain chain)
             throws IOException, ServletException { 
       // Select and set (if needed) the character encoding to be used 
             String encoding = selectEncoding(request);   
                 if (encoding != null)        {     
                        request.setCharacterEncoding(encoding); 
                               }
        // Pass control on to the next filter 
               chain.doFilter(request, response);  
                 }   
         public void init(FilterConfig filterConfig) throws ServletException {
         this.filterConfig = filterConfig;  
               this.encoding = filterConfig.getInitParameter("encoding");
                   }   
          protected String selectEncoding(ServletRequest request) { 
                 return (this.encoding);  
                   }
                 }web.xml中添加:<filter>
      <filter-name>Set Character Encoding</filter-name>
      <filter-class>blog.util.EncodingFilter</filter-class>
    <init-param>
     <param-name>encoding</param-name>
      <param-value>GBK</param-value></init-param>
      </filter>
      <filter-mapping>
      <filter-name>Set Character Encoding</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      

  2.   

    我加了过滤器,还是不行。而且tomcat下server.xml中我也加了URIEncoding="gb2312"。这个问题都快整死我了,还有没有哪位大哥有解决的办法?
      

  3.   

    中文乱码,表单用POST提交,加个过滤器转成UTF-8,get和地址传值要改service.xml文件的内容
      

  4.   

    jdbc:mysql://localhost:3306/jbbs2?useUnicode=true&characterEncoding=UTF-8
    这是mysql的,
    你在Oracle连接的后面加上红色部分试试!
      

  5.   

    应该是:
    useUnicode=true&characterEncoding=gb2312 
      

  6.   

    0.在href中传中文时,显示乱码,要在tomcat中设置server.xml
    <Connector port="8080" maxHttpHeaderSize="8192" 
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                   enableLookups="false" redirectPort="8443" acceptCount="100" 
                   connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 场合:页面本身有中文的时候
    解决办法:servlet:resp.setContentType("text/html;charset=gbk");
    Jsp: <%@ page contentType="text/html;charset=gb2312"%>
    注意:一定要写在PrintWriter out = resp.getWriter();之前
    场合:解决get方式乱码问题:
    解决办法:修改server.xml ?URIEncoding="GBK"
    场合:解决post方式提交内容的乱码
    解决办法:request.setCharacterEncoding("GBK");
    注意:一定要写在存取第一个参数之前
    不要调用response.setCharacterEncoding("GBK");
    场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数
    解决办法:<%request.setCharacterEncoding("GBK");%>
    注意:
    荐于经常看到朋友说哪里出现中文乱码了,菜鸟我以自己在项目经常遇到的整理了一下,有以下几个方面: 1.最基本的在jsp页面上要把pageEncoding设置为中文,如: <%@ page language="java" pageEncoding="GBK"%> 2.对于表单的doPost()提交,也会出现中文出现乱码,可以在servlet里设置如下:request.setCharacterEncoding("GBK"),response.setCharacterEncoding("GBK"),不过此方法在每个servlet都要设置,很麻烦,建议写个过滤器设置。可以参考以下: 
        public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) throws IOException, ServletException { HttpServletRequest request_1 = (HttpServletRequest) request; 
    HttpServletResponse response_1 = (HttpServletResponse) response; // 转换编码,并且加上去缓存 
    request_1.setCharacterEncoding("GBK"); 
    response_1.setCharacterEncoding("GBK"); 
    chain.doFilter(request, response); } 
    3、第三种就是 如果用doGet()提交,后面跟的参数如果也是中文,这个解决方法可以在tomcat或JBoss的配置文件里面配置,以tomcat为例: 
         <Connector port="8099" maxHttpHeaderSize="8192" 
                  maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                  enableLookups="false" redirectPort="8443" acceptCount="100" 
                  connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 
      在这里面最后加上URIEncoding="GBK". 
    4、ajax也会产生乱码问题,这个问题可以在tomcat的配置那里解决。 5、文件上传时文件名也会出现乱码。 
    可以用此方法paramMap.put(fi.getFieldName(), new String(fi.getString().getBytes("ISO-8859-1"),"GBK"));
      

  7.   

    在编写Servlet时 ,在其doPost、doGet方法中写入:
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    试试,看中文成乱码问题是否能解决!!!
      

  8.   

    将JSP页面的编码pageEncoding设为UTF-8,同时还应注意,如果该页面要接受参数的话,还应加上
    request.setCharacterEncoding("utf-8");
    然后将Servlet的doGet或doPost方法中的第一句也加上
    request.setCharacterEncoding("utf-8");
    也就是基本上在所有的页面或Servlet的编码及接受参数的编码都设为utf-8.