mysql+java+jsp中文乱码全套

 =======================================================================================其实mysql装好以后,他会要你进行配置的,如果你已经装好了没关系,再配置一次就是了,在开始菜单中的mysql---->MySQL Server Instance  Config Wizard点他就进行配置了,一切都保持默认就可除了一项,这一项就是选择字符集的时候默认是lating拉丁,所以要改成能显示中文的字符集,gbk,gb2312,utf-8都可以,至于这几种字符编码的区别我就不太清楚,不过我好像在哪本书上看了,说gb2312没有utf-8显示的全,意思就是uft-8能显示所有的中文字符,而gb2312对于一些生僻字可能就不能显示了,不过那都是几千万分之一了,因为那些字根本就不常见,一般也用不着,所以gb2312也是够用的了,不用担心他显示乱码.配好这一步以后,我们来看看我的字符集,在mysql命令行输用show variables like 'character/_set/_%'; 显示一下;

+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | latin1 |
| character_set_connection | latin1 |
| character_set_database   | latin1 |
| character_set_filesystem | binary |
| character_set_results    | latin1 |
| character_set_server     | latin1 |
| character_set_system     | utf8   |
+--------------------------+--------+
所以根本就不用设置其他的就都可以了,  网上有人 说要把其他的character_set_client /character_set_database ==都设成什么gb2312我不设一样可以.而且设了还出错,所以我们不用设,麻烦.

---------------------------------------------------------------------------------------------------------------------------------------------'

好现在我来讲一下怎么解决中文乱码问题吧,其实很简单, 网上也有,就是用一个转码就OK了,

原理:mysql默认的字符集是latin1,java中对应的就是ISO-8859-1字符集,所以存入数据时转换为ISO-8859-1,取出时再由ISO-8859-1转换为GBK就OK了。
import java.io.UnsupportedEncodingException;
//解决中文问题
public class MysqlCharacterChange {
 public static String changeToISO(String str) {
  if (str == null) {
   str = "";
  } else {
   try {
    str = new String(str.getBytes("GBK"), "ISO-8859-1");
    //System.out.println(str);
   } catch (Exception ex) {
    ex.printStackTrace();
   }
  }
  return str;
 }
 public static String changeToGBK(String str)
  {
   try {
     String temp_p = str;
     byte[] temp_t = temp_p.getBytes("ISO-8859-1");
     String temp = new String(temp_t,"GBK");
     return temp;
   }catch (Exception ex) {
   //System.out.println(ex);
    return "";
   }
  }

}

取出时 MysqlCharacterChange. changeToISO(rs.getString("列名");//这里的列名是你数据库中包含中文信息的列如name,CharacterChange这是我为

  id     name

 1       张三

这个函数接收一个字符串,返回一个字符串,返回的字符串是经进转码了的.只要在你要插入到数据库的地方调用这个函数就行了,

实例:
String  name=  "王五  "; 
String  address=  "广州";
insert  into  student(stu_id,name,address,birthdate)  values('12','  "+changeToISO(name)+  "','  "+changeToISO(address)+  "','1981/01/01')  ";

 也可以这样
     pstmt=con.prepareStatement("insert into departments (did,dname,updid) values(?,?,?)");
   //System.out.println(num + "/" + name + "/" + upnum);
   con.setAutoCommit(false);
   pstmt.setString(1,num);
   pstmt.setString(2, 你的类名.GBKToLatin1(name));//这里的name是一个包含中文字符的变量
   pstmt.setString(3, upnum);
   pstmt.executeUpdate();
   con.commit();

以上是解决数据库乱码的方法,至于jsp页面乱码问题的解决那就更简单了
<
%@page contentType="text/html; charset=gb2312"%>
这一行是设置页面显示的字符编码,然后页面间传递时使用的字符编码,我人用一个过滤器,

新建一个java类.我这里的文件名是SetCharacterEncodingFilter.java内容如下:

public class SetCharacterEncodingFilter implements Filter{

 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException,ServletException{
  request.setCharacterEncoding("UTF-8");
  chain.doFilter(request, response);
 }
 public void destroy() {
   // Just puts "destroy" string in log
  // Put your code here
 }

 /**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException if an error occure
  */
 public void init(FilterConfig filterConfig) throws ServletException {
  // Put your code here
 }

}

类新建好了以后,就到web.xml文件中去配置一下


2、再在web.xml文件中配置,注意一定要在最前面,不然在其他配置后面就有可能不能起来过滤效果。<filter-class>为上面那个类的详细路径和类名,一定不能错
<filter><filter-name>与<filter-mapping> <filter-name> 中名字要完全一样,名字可以自己乱取
<filter>  
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <filter-class>com.xeeder.character.SetCharacterEncodingFilter</filter-class>//这是上面那个类的具体位置,根据你自己建在哪里而定,我的是在这个包里com.xeeder.character文件名是SetCharacterEncodingFilter,所以就这样配.
   </filter>
 
 
  <filter-mapping>
    <filter-name>SetCharacterEncodingFilter</filter-name>//这个名字与上面的filter-name一致
    <url-pattern>/*</url-pattern>
  </filter-mapping>

ok了,所有的问题都OK了,一切乱码都搞定了.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值