!!!servlet 传数据给数据库出现中文乱码

网上的各种方法我都试过了
什么my.ini,
还有 request.setCharacterEncoding("UTF-8");//处理编码

response.setCharacterEncoding("UTF-8");//处理编码
以及public String handleString(String s) {
try{
byte bb[] =s.getBytes("UTF-8");
s=new String(bb);
}
catch(Exception ee){

        }
        return s; 
}
最后的String uri="jdbc:mysql://127.0.0.1/zbsjk?"+"user=root&password=123456&characterEncoding=utf8";
都解决不了,难道我要重装mysql吗!!!!QUQ

你说jsp没问题,那我问你你的jsp页面的字符集是UTF-8吗,还有post请求不需要转码的,get请求数据时候才用到你上面的方法,我自己post数据进去都是好的,只要get请求时候才会采用new String(str.getByte("iso-8859-1"),"utf-8");来进行转码

数据库的my.cnf 里加上 character-set-server=utf8 ,然后重启mysql服务。

既然不是程序和连接字符串的问题,那就看看是不是mysql的问题;

    查看数据库编码:    
                        show variables like '%char%';

    修改字符编码:
                        set global character_set_database=utf8;
                        set global character_set_server=utf8;
                        show variables like '%char%';

[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

你的数据传到servlet里面是正常的吗 还是servlet数据正常在传到数据库才乱码的

web.xml中的servlet过滤路径是不是写错了 /*

后台的数据类型,数据库引擎,数据库类型长度的大小,数据库编码等等都有可能

characterEncoding=gb2312 换成这个试试

设置项目的编码为utf-8试试

数据库和表的字符集设置了吗?

首先你断点看看是不是,java里的数据,传到数据库之前乱码了吗?

如果没有没乱,那就是 数据设置的问题,如果乱码了那就是你java程序的问题

数据库类型的问题吧?。看一下数据库类型有没有问题。

  • package servlet;
  • import flogin.rigister;
  • import java.io.IOException;
  • import java.io.PrintWriter;
  • import java.io.IOException;
  • import java.io.PrintWriter;
  • import java.sql.*;
  • import java.io.*;
  • import javax.servlet.*;
  • import javax.servlet.http.*;
  • import java.util.*;
  • import javax.servlet.ServletException;
  • import javax.servlet.http.HttpServlet;
  • import javax.servlet.http.HttpServletRequest;
  • import javax.servlet.http.HttpServletResponse;
  • public class HandleRegister extends HttpServlet {
  • public void init(ServletConfig config) throws ServletException{
  • super.init(config);

  • try{
  • Class.forName("com.mysql.jdbc.Driver");
  • }
  • catch(Exception e){

  • }
  • }
  • public String handleString(String s) {
  • try{
  • byte bb[] =s.getBytes("iso-8859-1");
  • s=new String(bb);
  • }
  • catch(Exception ee){

  • }
  • return s;
  • }

  • /**
  • * The doGet method of the servlet.
  • *
  • * This method is called when a form has its tag value method equals to get.
  • *
  • * @param request the request send by the client to the server
  • * @param response the response send by the server to the client
  • * @throws ServletException if an error occurred
  • * @throws IOException if an error occurred
  • */
  • public void doGet(HttpServletRequest request, HttpServletResponse response)
  • throws ServletException, IOException {
  • doPost(request,response);
  • }
  • /**
  • * The doPost method of the servlet.
  • *
  • * This method is called when a form has its tag value method equals to post.
  • *
  • * @param request the request send by the client to the server
  • * @param response the response send by the server to the client
  • * @throws ServletException if an error occurred
  • * @throws IOException if an error occurred
  • */
  • public void doPost(HttpServletRequest request, HttpServletResponse response)
  • throws ServletException, IOException {
  • String uri="jdbc:mysql://127.0.0.1/zbsjk?"+"user=root&password=123456&characterEncoding=utf8";
  • Connection con;
  • PreparedStatement sql;
  • rigister userBean=new rigister();
  • request.setAttribute("userBean", userBean);
  • String logid=request.getParameter("id").trim(),
  • pwd=request.getParameter("pwd").trim(),
  • pw2=request.getParameter("pwd2").trim(),
  • phone=request.getParameter("tel").trim(),
  • realname=request.getParameter("realname").trim(),
  • add=request.getParameter("addr1")+request.getParameter("addr2"),
  • skill=request.getParameter("skill"),
  • birth=request.getParameter("birth"),
  • belif=request.getParameter("introduce"),
  • sex=request.getParameter("gender");

  • if(logid==null)
  • logid="";
  • if(pwd==null)
  • pwd="";
  • if(!pwd.equals(pw2)){
  • userBean.setBackNews("两次密码不同。注册失败");
  • RequestDispatcher dispatcher=request.getRequestDispatcher("/Rigister.jsp");
  • dispatcher.forward(request,response);
  • return;
  • }
  • boolean isLD=true;
  • for(int i=0;i<logid.length();i++){
  • char c=logid.charAt(i);
  • if(!((c<'z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))
  • isLD=false; //判断由英文字母+数字组成

  • }
  • boolean boo=logid.length()>0&&pwd.length()>0&&isLD;
  • String backNews;
  • try{
  • con=DriverManager.getConnection(uri);
  • String insertCondition="INSERT INTO J VALUES(?,?,?,?,?,?,?,?,?)";
  • sql=con.prepareStatement(insertCondition);
  • if(boo){
  • sql.setString(1, handleString(logid));
  • sql.setString(2, handleString(realname));
  • sql.setString(3, handleString(pwd));
  • sql.setString(4, handleString(phone));
  • sql.setString(5, handleString(sex));
  • sql.setString(6, handleString(birth));
  • sql.setString(7, handleString(add));
  • sql.setString(8, handleString(belif));
  • sql.setString(9, handleString(skill));
  • int m=sql.executeUpdate();
  • if(m!=0){

  • response.setContentType("text/html;charset=utf-8");
  • PrintWriter out=response.getWriter();
  • out.println("");
  • out.println("注册成功,跳转登陆");
  • out.println(handleString(realname));
  • out.println("");


  • }
  • }
  • else{
  • RequestDispatcher dispatcher=request.getRequestDispatcher("/Rigister.jsp");
  • dispatcher.forward(request,response);
  • backNews="信息填写不完整或名字中有非法字符";
  • userBean.setBackNews(backNews);
  • }
  • con.close();
  • }
  • catch(SQLException exp){
  • response.setContentType("text/html;charset=utf-8");
  • PrintWriter out=response.getWriter();
  • out.println("");
  • out.println(exp);

  • out.println("");

  • }

  • }
  • /**
  • * Initialization of the servlet.
  • *
  • * @throws ServletException if an error occurs
  • */
  • public void init() throws ServletException {
  • // Put your code here
  • }
  • }

这是我的servlet代码,前面的jsp感觉是没有问题的,我用action method用post

传到数据库是出现???,还是乱码,如果是????的话,String uri这里还要加上useUnicode=true

应该是数据编码设置出现问题,设置characterEncoding=gb2312 /utf-8

数据库在创建表的时候要设置字符集是UTF-8,你可以现在数据库里面直接添加记录看看是不是能添加进去汉字

最后一种方式是对的,不过,写法不是这样的,先检查你的Servlet的字符设置是否正确; 然后就看MyQL或者Orcle数据库链接操作的地方,写一个characterEncoding=UTF-8;
而不是在传参的时候写,这样也会很累, 总的来说你写错了位置,去找数据库连接的代码,在后面加上。去吧!