首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

servlet与oracle数据库中文乱码有关问题

2012-12-16 
servlet与oracle数据库中文乱码问题在线等servlet从oracle获取数据时可以显示中文,从页面通过servlet写数

servlet与oracle数据库中文乱码问题在线等
servlet从oracle获取数据时可以显示中文,从页面通过servlet写数据到oracle时,变成乱码“??¢è′”,
求解。。。。。。
[最优解释]
乱码具体解决方案:


中文乱码过滤器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标签中设定编码与之前的几个地方一致


[其他解释]
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;
 }
[其他解释]
楼上 过滤器,项目较大 页面较多的时候 建议 用楼上的方法,

测试案例的话  直接在servlet 中 持久化数据库之前 
request.setcharacterencoding() 和response.setcharacterencoding() 同时设置编码格式 ,
-----
doPost{
 request.setcharacterencoding();
 response.setcharacterencoding();
 String test=request.getparameter("test");
}
----
 注意 编码格式要和页面统一,此法 包治百病,  除 Ajax 回调
[其他解释]
没遇到过 ,顶下。
[其他解释]
IT0918liu :
你说的方法我试了  页面从数据库读数据没问题,但是  从页面往数据库写数据就变成乱码了。。。。
[其他解释]
引用:
乱码具体解决方案:
Java code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667中文乱码过滤器web.xml中1.注意乱码过滤器要写在struts2过滤器之前,因……


你说的方法我试了  页面从数据库读数据没问题,但是  从页面往数据库写数据就变成乱码了。。。。 
[其他解释]
引用:
乱码具体解决方案:
Java code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667中文乱码过滤器web.xml中1.注意乱码过滤器要写在struts2过滤器之前,因……



解决了  谢谢

热点排行